Together for a Shared future

学习不停

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

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

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

系统监控

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

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

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

概要

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

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

系统监控安装及配置

工具: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】

【创建压测用例】

【启动压测】

监控面板:指标图表

进入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

监控面板:HTTP监控

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

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

  2. 某个请求的平均耗时

  3. 请求触发的SQL次数

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

监控面板:SQL监控

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

  1. 具体某个SQL的内容

  2. SQL执行总次数

  3. SQL的执行平均耗时

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

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

监控面板:Spring容器监控

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

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

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

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

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

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

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

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

监控面板:HTTP异常监控

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

  1. HTTP异常的总次数

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

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

监控面板:系统异常监控

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

  1. 系统错误的总次数

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

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

监控面板:线程监控

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

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

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

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

监控面板:系统信息监控

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

  1. 主机IP

  2. Java使用的内存

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

  4. 系统使用率

  5. 活跃的线程数

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

监控面板:JavaMelody的缓存文件

javamelody的本地数据缓存

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

什么是rrd文件?

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

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

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

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

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

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

总结

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

后端技术&架构精华

《源码系列》

《JDK之Object 类》

《JDK之BigDecimal 类》

《JDK之String 类》

《JDK之Lambda表达式》

《Spring源码:Event事件发布与监听》

《经典书籍》

《Java并发编程实战:第1章 多线程安全性与风险》

《Java并发编程实战:第2章 影响线程安全性的原子性和加锁机制》

《Java并发编程实战:第3章 助于线程安全的三剑客:final & volatile & 线程封闭》

《服务端技术栈》

《Docker 核心设计理念》

《Kafka史上最强原理总结》

《HTTP的前世今生》

《算法系列》

《读懂排序算法(一):冒泡&直接插入&选择比较》

《读懂排序算法(二):希尔排序算法》

《读懂排序算法(三):堆排序算法》

《读懂排序算法(四):归并算法》

《读懂排序算法(五):快速排序算法》

《读懂排序算法(六):二分查找算法》

《项目管理》

《学点项目管理,对咱程序员很重要》

《项目管理实践篇(一):技术人如何做好风险把控》

《项目管理实践篇(二):总结项目经历》

《如何写好一篇汇报材料》

《在鹅厂工作一周年的经验分享》

一文看懂:性能监控神器JavaMelody相关推荐

  1. 【CV】一文看懂目标检测神器YOLO5

      磐创AI出品   该库代表Ultralytics对未来对象检测方法的开源研究,并结合了以前的YOLO库https://github.com/ultralytics/yolov3在自定义数据集上训练 ...

  2. 天线巴伦制作和原理_一文看懂巴伦(功能原理、性能参数、基本类型)

    原标题:一文看懂巴伦(功能原理.性能参数.基本类型) 巴伦(英语为balun)为一种三端口器件,或者说是一种通过将匹配输入转换为差分输出而实现平衡传输线电路与不平衡传输线电路之间的连接的宽带射频传输线 ...

  3. 一文看懂推荐系统:排序06:粗排三塔模型,性能介于双塔模型和精排模型之间

    一文看懂推荐系统:排序06:粗排三塔模型,性能介于双塔模型和精排模型之间 提示:最近系统性地学习推荐系统的课程.我们以小红书的场景为例,讲工业界的推荐系统. 我只讲工业界实际有用的技术.说实话,工业界 ...

  4. 一文看懂钢板测宽仪的特征性能

    钢板测宽仪,顾名思义用于测量钢板宽度值的仪器,当然它也不仅仅用于钢板检测,像木板.橡胶板.带钢.塑料板.合金板等也都是可以使用的,现在的测宽仪为了适应自动化的生产模式,更是将其安装于板材生产线进行实时 ...

  5. 一文看懂JUC之AQS机制

     作者:VectorJin juejin.cn/post/6844904041760161806 为了解决原子性的问题,Java加入了锁机制,同时保证了可见性和顺序性.JDK1.5的并发包中新增了Lo ...

  6. 新基建必看系列——一文看懂爆火的智慧灯杆未来趋势及竞争格局

    新基建必看系列--一文看懂爆火的智慧灯杆未来趋势及竞争格局 智慧灯杆是集照明.视频监控.交通管理.环境监测.通信等多功能于一体的新型信息基础设施,由基础设施及杆体,照明设施,交通.视频监控等其他杆载设 ...

  7. 《SOC芯片研究框架》深度科普,发展趋势、技术特点、产业链一文看懂

    片上系统SoC(System on Chip),即在一块芯片上集成一整个信息处理系统,简单来说 SoC芯片是在中央处理器CPU的基础上扩展音视频功能和专用接口的超大规模集成电路,是智能设备的" ...

  8. php-fpm进程的用户组,一文看懂PHP进程管理器php-fpm

    php-fpm是什么 php-fpm是PHP的一个进程管理器.php下面的众多work进程皆有php-fpm进程管理器管理. php-fpm的工作原理 php-fpm全名是PHP FastCGI进程管 ...

  9. [转帖] 一文看懂:边缘计算究竟是什么?为何潜力无限?

    一文看懂:"边缘计算"究竟是什么?为何潜力无限? 转载cnbeta 云计算 雾计算 边缘计算... 知名创投调研机构CB Insights撰文详述了边缘计算的发展和应用前景.文章称 ...

最新文章

  1. 利用委托和泛型实现树的常用操作
  2. python3连接mysql,python3连接MySQL数据库实例详解
  3. 【Ajax技术】使用XHR对象发送和接受数据
  4. ASP.NET 2.0 XML 系列(4):用XmlReader类介绍
  5. 有没有插件_这 10 款插件让你的 GitHub 更好用、更有趣
  6. mybatis学习7之动态sql
  7. 骁龙660是32位还是64位_骁龙660是32位还是64位_都是搭载骁龙660处理器 这三款国产手机如何选...
  8. (二)Linux下的crontab定时执行任务命令详解
  9. 他从小把数学书当小说看,凭借一本书将全世界狠狠甩在身后,被誉为中国的牛顿...
  10. 在EI中查找某作者的会议论文是否被收录
  11. 命名之法 —— 时间、季节、地点
  12. 凸优化有关的数值线性代数知识三:LU Cholesky和LDL因式分解
  13. OpenCV-Python教程(5、初级滤波内容)
  14. 读书笔记2014第12本:《创新者的窘境》
  15. C语言大作业:车辆信息管理系统
  16. 教新手小白如何通过五分钟学会用Python爬取女神照片!
  17. cad安装日志文件发生错误_CAD安装不正确怎么办?CAD发生错误安装过早结束的解决方法...
  18. 131多机型解码擦除工具
  19. Objective-C文字换行方式(解决英文在行末时的换行问题)
  20. Android应用程序如何进行系统签名

热门文章

  1. 2021年中国日用玻璃生产现状及竞争格局分析,行业朝“五化”方向发展「图」
  2. C++11条件变量:notify_one()与notify_all()的区别
  3. 在next js中添加google analytics功能
  4. IBMX3650M4服务器_安装内存_内存顺序
  5. 单引号与双引号的用法
  6. web表格CSS 属性
  7. 【microbit】micropython 之 体感遥控器
  8. 天猫精灵技能开发从创建到发布
  9. 互联网常用词汇索引表
  10. 一个hin秀的小学三年级奥数题 [hin秀]