java 监控 m_Java性能监控-Jprofiler & Mat

Java性能监控有很多工具,例如自带的Jvisualvm、商业软件jprofiler ,以及和其类似的YourKit Java Profiler;本次主要记录jprofiler的使用。

Jvisualvm

Jvisualvm 是java自带的性能分析工具,在JDK6以后已经作为Oracle JDK的一部分,放在bin目录下,可以直接打开使用。

Jvisualvm 可以分析CPU、内存、线程、生成jdk快照等。

Jvisualvm 是基于jdk分析接口,提供的可视化操作界面。

支持本地监控和远程连接监控。

打开方式

5bf5fbcd4648df56ca7bc9a80d81eaee.png

操作界面

f1964c5e0e9519374a42dc8d9f086c81.png

b11666e9901d6edb784bd37e3e00345b.png

Jprofiler

jprofiler 是一个商业的、分析JVM内部运行状况、以及服务器资源占用的工具。

jprofiler 是基于jdk分析接口、以及重写class字节码并收集方法执行信息后,提供的可视化分析界面

支持本地监控和远程连接监控。

jprofiler相对于Jvisualvm加入了字节码重写技术,并且提供了更多层面的监控信息。

jprofiler可以通过服务器或框架暴露的Mbeans进行远程操作。

帮助文档

安装

本机安装

本机安装对应的客户端

集成IDE插件进行

首先下载客户端进行安装。

官网下载URL

在IDEA插件库搜索jprofiler插件进行安装。

9ec706cabcc109af20754a4d89d387ed.png

选择方法调用监控策略

jprofiler可以跟踪方法的调用树和CPU执行时间,有大体分为两种策略:

instrumentation 为全部采集,使用字节码重写技术对代码进行跟踪 。

Sampling 为对堆栈信息进行抽样分析(5ms一次),如果代码执行很快,有些可能采集不到。

官方策略说明

18de2f60e030cc00b063e254127cc27c.png

4. 接下来就是成功界面

279853a444d15dd1b5e5a7786caa324e.png

远程服务器监控

一般情况下我们都在远程服务器上进行性能测试,所以对服务器的监控是很重要的部分。

下面记录一下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

b55cca26d4e9c3c38e359671e2909052.png

本地连接

9ae28ce4e4ca1f1ce19ab3e6b5ecbff0.png

b436d43c7830114b177e34e5fb776f92.png

22d22eebe20323a3c16b20319202ce17.png

005d718b72345796809200eea31ada71.png

总体监控

默认jprofiler打开的是“遥感监测”界面,主要监控指标有CPU、内存、GC活动、线程等

e1d5445f6ff6160bdb32dc11db7cf06d.png

动态内存监控

动态内存主要监控实时内存占用,可以用来查看各个对象的实例数和所耗内存;

除此之外还可以监控每个调用链过程中对内存的消耗。

27d4eb0ff55a5f739d0972cb354e01be.png

d812f2fa2348fdf56bbda34e2d17da9f.png

堆行者-Heap walker

获取瞬时堆信息(注意会引起STW操作),并且进行相关数据分析。

059108a3a0c0b2141f8cd78c3e92c739.png

cpu时间监控

可以监控代码对CPU占用时长,用来分析CPU占用热点代码

cd136b59e69a34a0e3ce131ec7723a93.png

线程监控

可以查看各个线程的运行状态、时长

7a35a38e19c305d08bce4d18150278fc.png

锁监控-死锁检测

可以监控系统死锁的情况、代码位置

c123606e4c0550c6c8321aebb2f1b4bf.png

jdbc分析

用来查看数据库连接数、db热点操作、sql执行时间等

37f68c10f1aabbfbcefe2568ba9adb82.png

JEE&Probes

此模块区别于方法级别的监控,主要是从更高层次例如http接口、socket、文件操作层面进行监控;这里主要介绍几个常用的。

http接口

监控服务器的http接口调用情况。

691ffd1afe49ae2de3c53ad8f7bae63b.png

外部http接口调用

监控服务器调用外部的http接口情况。

196fcccccbf65fca76c065fb5e55d18e.png

外部socket

监控服务器调用外部的scoket情况。

1f96d2b940762604c0f1854227a9f6d5.png

服务器文件

监控服务器内部文件流使用情况。

65ce4608650dc3f60a2c61967fd1a09f.png

Mbeans

部分服务或者java框架会提供外部的Mbeans,便于系统监控、配置、操作;普通开发场景下可能较少使用。

spring boot提供了公开的Mbeans用来关闭服务,此处演示远程关闭spring boot。

a0ad6eb777aa4c0a88954c512c890f56.png

性能影响

测试对100个对象进行排序操作

200个并发在1s内执行;开启无限循环压测至10w个样本

jprofiler开启cpu时间记录

不使用jprofiler压测结果

ba212e5bedfb76e59260cc4f49f93347.png

使用jprofiler压测结果

6da3f79f65142413b0ac478738d51c60.png

cpu使用率

c9f37eede2b0e3e267ce1adb060835ea.png

结论

jprofiler的确会对性能产生一定的影响,具体还要根据各自业务进行多场景的不同样本分析,这里的结论仅限参考。

jprofiler重写字节码可能会有未知的风险以及性能开销,生产禁止使用。

dump JVM快照操作会导致JVM STW ,只能在测试或者本机使用哦。

堆分析

JVM提供了jstack、jmap、jhat等小工具,主要是用来记录线程快照(jstack)、堆快照(jmap)、以及堆信息分析(jhat)。

在生产过程中,如果发生了内存泄露导致jvm所占内存越来越大,可以通过dump heap快照进行问题分析。

#使用jmap导出堆信息

jmap -dump:format=b,file=heap.bin PID

市面上有不少针对堆快照进行分析的工具,例如JVM自带的jhat、Eclipse提供的Memory Analyzer Tools(MAT)、以及Jprofiler。

jhat

jhat是JVM自带的快照分析工具;实测耗费内存严重,且速度慢;给了4倍的内存还磨磨唧唧半天也分析不出来,heap才2GB啊...

同时它还有个个缺点是界面不容易看,没有任何图形化,只有个超长的分析列表。

Jhat的优点是支持在远程解析,并提供在线访问结果的端口。

#使用jhat进行分析,并通过7000端口进行访问(jhat不建议使用)

jhat -J-mx512m heap.bin

9d725ceaef500cb335431c607c8baf77.png

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

4a64cc74465ac6233621fec7be10c32b.png

运行完成后,mat会在heap文件目录生成heap_Leak_Suspects.zip、heap_System_Overview.zip、heap_Top_Components.zip三个文件夹。

分别代表:可疑分析、概览、组件分析;解压后点击对应的html即可查看。

cf041cc6baf85a89348da5897444e025.png

Jprofiler

目前还未找到jprofiler在远程机器上解析的操作步骤,目前先写个本地的,后续有再补充。

jprofiler首先需要将dump的堆快照后缀更改为.hprof,然后才能打开。

jprofiler打开dump文件较快,且功能也比较丰富、图形化界面强大。

jprofiler同时提供了更多的检测能力,比如分析重复对象以及空数组等(下图3)。

2fa7458d46cf9116cd9b74a381438c38.png

7f92bf3ea40568f8bb8fef40114cd955.png

888ca9487340d744cf9c44051008a7cf.png

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值