Java性能监控有很多工具,例如自带的Jvisualvm、商业软件jprofiler ,以及和其类似的YourKit Java Profiler;本次主要记录jprofiler的使用。
Jvisualvm
Jvisualvm 是java自带的性能分析工具,在JDK6以后已经作为Oracle JDK的一部分,放在bin目录下,可以直接打开使用。
Jvisualvm 可以分析CPU、内存、线程、生成jdk快照等。
Jvisualvm 是基于jdk分析接口,提供的可视化操作界面。
支持本地监控和远程连接监控。
打开方式
选择方法调用监控策略
jprofiler可以跟踪方法的调用树和CPU执行时间,有大体分为两种策略:
instrumentation 为全部采集,使用字节码重写技术对代码进行跟踪 。
Sampling 为对堆栈信息进行抽样分析(5ms一次),如果代码执行很快,有些可能采集不到。
官方策略说明
远程服务器监控
一般情况下我们都在远程服务器上进行性能测试,所以对服务器的监控是很重要的部分。
下面记录一下jprofiler监控远程spring boot的过程。
服务器jprofiler安装
#下载
wget https://download-gcdn.ej-technologies.com/jprofiler/jprofiler_linux_11_1_4.sh
#授权
chomd +x jprofiler_linux_11_1_4.sh
#安装、按照提示操作即可
./jprofiler_linux_11_1_4.sh
#运行一个spring boot程序
nohup java -jar microservice-web-1.0-SNAPSHOT.jar &
#进入安装目录
cd /opt/jprofiler11/bin/
#运行jprofiler,并根据提示输入端口
./jpenable
动态内存监控
动态内存主要监控实时内存占用,可以用来查看各个对象的实例数和所耗内存;
除此之外还可以监控每个调用链过程中对内存的消耗。
堆行者-Heap walker
获取瞬时堆信息(注意会引起STW操作),并且进行相关数据分析。
线程监控
可以查看各个线程的运行状态、时长
jdbc分析
用来查看数据库连接数、db热点操作、sql执行时间等
外部http接口调用
监控服务器调用外部的http接口情况。
服务器文件
监控服务器内部文件流使用情况。
性能影响
测试对100个对象进行排序操作
200个并发在1s内执行;开启无限循环压测至10w个样本
jprofiler开启cpu时间记录
不使用jprofiler压测结果
cpu使用率
MAT
Eclipse提供了Memory Analyzer Tools用来分析堆信息,下载界面。
mat支持在远程进行分析并生成zip文件,下载后打开即可通过html界面进行查看分析结果。
#下载
wget http://eclipse.stu.edu.tw/mat/1.10.0/rcp/MemoryAnalyzer-1.10.0.20200225-linux.gtk.x86.zip
#解压
unzip MemoryAnalyzer-1.9.1.20190826-linux.gtk.x86_64.zip
# 修改内存大小:-Xmx4096m (内存要大于heap文件,否则可能无法加载导致无法分析:)
vim MemoryAnalyzer.ini
#运行并生成结果
./ParseHeapDump.sh ../heap.bin org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components
Jprofiler
目前还未找到jprofiler在远程机器上解析的操作步骤,目前先写个本地的,后续有再补充。
jprofiler首先需要将dump的堆快照后缀更改为.hprof,然后才能打开。
jprofiler打开dump文件较快,且功能也比较丰富、图形化界面强大。
jprofiler同时提供了更多的检测能力,比如分析重复对象以及空数组等(下图3)。

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92722 人正在系统学习中 相关资源:连续梁的弯矩计算软件V1.0绿色版_连续梁-其它代码类资源-CSDN文库
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!