写点什么

一文看懂:性能监控神器 JavaMelody

作者:后台技术汇
  • 2023-05-02
    云南
  • 本文字数:2852 字

    阅读完需:约 9 分钟

一文看懂:性能监控神器JavaMelody

1、前言

最近研究了一下系统监控的方案,发现 JavaMelody 的存在。于是便自己搭建了一套环境来试用下。

实际上,公司项目里头一直都用到它。只是由于云原生业务发展太迅猛,DevOps 工具链也变得十分完善了,在林林总总的监控工具中,JavaMelody 变得不够耀眼了;更多情况下是使用阿里云或者腾讯云等公有云来部署服务,而平台提供的监控手段更是多样。

但是,作为个人学习的项目,JavaMelody 作为支持 Java 项目的监控工具,其接入方便且功能强大,还是很值得开发者去学习了解一下的。

2、系统监控

我们谈到监控,一般设计到两个方面的内容:

  1. 服务器本身的监控。(比如:linux 服务器的 CPU,内存,磁盘 IO 等监控)

  2. 业务系统的监控。(比如:业务系统性能的监控,SQL 语句的监控,请求超时的监控,用户输入的监控,整个请求过程时间的监控,优化等等)

3、工具概要

JavaMelody:是一款能够监测 Java 或 Java EE 应用程序的服务器,确实,JavaMelody 能够很好的反应我们系统的各种性能指标,并提供很好的图形界面。图表可以按天,周,月,年或自定义时间段查看。

其指标还能反应 Java 内存和 Java CPU 使用情况、用户 Session 数量、JDBC 连接数、http 请求、sql 请求、jsp 页面与业务接口方法(EJB3、Spring、 Guice)的执行数量,平均执行时间,错误百分比等。

4、系统监控安装及配置



工具:Jmeter 压测工具、MySQL、SpringBoot 工程


1、创建一个 springBoot 工程项目

代码仓库:https://github.com/scaummb/traffic-controller

2、添加 maven 依赖到 springBoot 工程

其实想要集成到 spring 中,很简单,只要在 maven 项目中添加 JavaMelody 依赖即可。


  <!-- 监控 -->  <dependency>      <groupId>net.bull.javamelody</groupId>      <artifactId>javamelody-spring-boot-starter</artifactId>      <version>1.88.0</version>  </dependency>
复制代码


3、添加 mybatis 的依赖到 springBoot 工程

<!-- mybatis --><dependency>    <groupId>org.mybatis</groupId>    <artifactId>mybatis</artifactId>    <version>3.5.4</version></dependency><dependency>    <groupId>org.mybatis.spring.boot</groupId>    <artifactId>mybatis-spring-boot-starter</artifactId>    <version>2.1.2</version>    <exclusions>        <exclusion>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-logging</artifactId>        </exclusion>    </exclusions></dependency>
<!-- mysql --><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.23</version></dependency><dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.5</version></dependency>
复制代码


4、安装 Mysql(相关资料自行百度即可)


5、启动服务



6、启动压测工具 Jmeter


【工具下载】

https://jmeter.apache.org/download_jmeter.cgi


【配置参考】

https://blog.csdn.net/weixin_43282627/article/details/124731464

http://t.zoukankan.com/balllyh-p-9508632.html


【启动 Jmeter】



【创建压测用例】



【启动压测】



5、监控面板:指标图表

进入 JavaMelody 的监控页

http://localhost:8080/monitoring



1、我们可以自定义监控的时间范围



2、查看内存使用情况

http://localhost:8080/monitoring?part=graph&graph=usedMemory



3、查看 CPU 使用情况

http://localhost:8080/monitoring?part=graph&graph=cpu



4、查看线程存活情况

http://localhost:8080/monitoring?part=graph&graph=activeThreads



5、查看被使用的 JDBC 连接情况

http://localhost:8080/monitoring?part=graph&graph=usedConnections



6、请求量统计(压力测试是,5QPS,一分钟大约 5*60 = 300)

http://localhost:8080/monitoring?part=graph&graph=httpHitsRate



7、请求平均耗时

http://localhost:8080/monitoring?part=graph&graph=httpMeanTimes



8、请求失败情况

http://localhost:8080/monitoring?part=graph&graph=httpSystemErrors


9、SQL 请求量统计

http://localhost:8080/monitoring?part=graph&graph=sqlHitsRate


10、SQL 的平均耗时

http://localhost:8080/monitoring?part=graph&graph=sqlMeanTimes

11、SQL 错误情况

http://localhost:8080/monitoring?part=graph&graph=sqlSystemErrors

6、监控面板:HTTP 监控

HTTP 监控模块包括了以下指标:

  1. 具体某个请求的总次数

  2. 某个请求的平均耗时

  3. 请求触发的 SQL 次数

  4. 触发 SQL 的平均执行耗时


7、监控面板:SQL 监控


SQL 监控模块包括了以下指标:

  1. 具体某个 SQL 的内容

  2. SQL 执行总次数

  3. SQL 的执行平均耗时

  4. SQL 执行时间所占的百分比

  5. SQL 执行时间失败所占的百分比



8、监控面板:Spring 容器监控

Spring 容器监控模块包括了以下指标:

  1. 业务接口方法的执行总次数(非常细粒度的监控)

  2. 业务接口方法的执行总时间

  3. 业务接口方法的执行平均耗时

  4. 业务接口方法所占 CPU 资源

  5. 业务接口方法的申请资源大小

  6. 业务接口方法的触发 SQL 次数

  7. 业务接口方法的触发 SQL 执行的平均耗时


9、监控面板:HTTP 异常监控

HTTP 异常监控模块包括了以下指标:

  1. HTTP 异常的总次数

  2. 异常请求的平均分配内存空间

  3. HTTP 异常的各项指标排行榜


10、监控面板:系统异常监控

系统异常监控模块包括了以下指标:

  1. 系统错误的总次数

  2. 系统错误的详情和指标排行榜



我们甚至还可以读取到某个异常的堆栈


11、监控面板:线程监控


线程监控模块包括了以下指标:

  1. 应用当前活跃线程数量

  2. 应用线程排行榜(CPU 占用时间、线程方法、状态)【参考:《系统线程》】

  3. 线程操控面板(终止和终端)


12、监控面板:系统信息监控

系统信息监控模块包括了以下指标:

  1. 主机 IP

  2. Java 使用的内存

  3. 活跃的和被使用的 jjdbc 连接数

  4. 系统使用率

  5. 活跃的线程数

  6. JVM 参数(虚拟机参数、内存参数、磁盘空间等)



13、监控面板:JavaMelody 的缓存文件

javamelody 的本地数据缓存



虽然都是 *.rrd 的文件,无法直接读取,但是从名字就可以看到它都记录什么数据。比如 sql 线程数,内存等等。后面会继续研究对多种项目的监控,以及源码。


14、什么是 rrd 文件?

所谓的“Round Robin” 其实是一种存储数据的方式,使用固定大小的空间来存储数据,并有一个指针指向最新的数据的位置。 


我们可以把用于存储数据的数据库的空间看成一个圆,上面有 很多刻度。这些刻度所在的位置就代表用于存储数据的地方。所谓指针,可以认为是从圆心指向这些刻度的一条直线。


指针会随着数据的读写自动移动。这个圆没有起点和终点,所以指针可以一直移动,而不用担心到达终点后就无法前进的问题。


在一段时间后,当所有的空间都存满了数据,就又从头开始存放。 这样整个存储空间的大小就是一个固定的数值。

https://www.cnblogs.com/jin-xin/p/6773622.html

所以 RRDtool 就是使用类似的方式来存放数据的工具, RRDtool 所使用的数据库文件的后缀名是'.rrd。如下图: 



15、总结

JavaMelody 并不会模拟用户请求而是监控用户的请求并且形成图表报告。业界其实有更加强大的监控系统,比如:连接池方面 druid、系统方面 zabbix,业务方面可以用 cat 等等,甚至开发采用自己的监控系统也是可以的。

发布于: 刚刚阅读数: 2
用户头像

因为向往,所以坚持。 2018-03-28 加入

🏆InfoQ首批签约作者 & 最佳内容创作者 & 首届引航计划参与者 🏆 微信公众号 -【后台技术汇】 腾讯码农 - 涉猎过游戏,tob行业,代码仓库等行业。

评论

发布
暂无评论
一文看懂:性能监控神器JavaMelody_三周年连更_后台技术汇_InfoQ写作社区