JProfiler11使用教程之JVM调优问题小结

网友投稿 397 2022-08-20


JProfiler11使用教程之JVM调优问题小结

安装JProfiler

jprofiler_windows-x64_11_0_2

链接: https://pan.baidu.com/s/1EWxW5VT100D1v_HVvKYGqQ?pwd=qif5 提取码: qif5

JProfiler11破解

然后打开破解机器 KeyGen.exe

链接: https://pan.baidu.com/s/13MX6iLFtcmerdGovYjOh4g?pwd=cx7e 提取码: cx7e

配置本地监控

我们启动一个本地项目weblogic,Jboss,tomcat或者springboot都行,我们就拿主流的springboot来说(其实内嵌的就是tomcat)

然后我们打开jprofiler,监控指定的程序

配置远程监控

我的服务器是x86的uname -m在需要监听的目标服务器上安装jprofiler_linux_11_0_2.tar.gz

链接: https://pan.baidu.com/s/1O03jqyBdsPZHt3zpoMzwAg?pwd=n297 提取码: n297

我是放在/opt 下,解压tar zxfv jprofiler_linux_11_0_2.tar.gz,重命名为:jprofiler11配置/etc/profile文件,添加如下内容

export INSTALL4J_java_HOME=/usr/local/src/java/java-se-8u41-ri/jre #jdk安装目录下

export LD_LIBRARY_PATH=/opt/jprofiler11/bin/linux-x86 #jprofile的安装目录下

找java安装目录whereis java

/usr/local/src/java/java-se-8u41-ri/ 就是安装目录,我们进去看看有没有jre目录

修改完后,使环境变量生效source /etc/profile

需要监听的项目必须在服务器上运行中否则JProfiler 启动会失败的

启动自己的项目然后检测是否启动

启动成功后那么就可以启动服务器上的JProfiler服务了 /opt/jprofiler11/bin/jpenable

选择[1]然后会显示客户端可以连接的端口号,用于客户端连接服务器的

配置window下的jprofile11

jProfiler客户端介绍

仪表盘

这个不用多说,看说明就知道啥东西

查看对象增长情况

ALL Objects(全部对象)

Recorded Objects (记录对象)

我们可以指定开启时间内记录对象的的使用情况,这样就能更佳快速的找到问题 ,每次开关都会从新统计,还有最关键的就是 Mark Current 这个按钮,他可以标记现在对象的使用情况为绿色,那么行增的对象就是红色了,这样一对比就知道那个对象有问题了

右键可以删除标记

Allocation Call Tree(记录调用树)

开始后统计调用情况,每次开关都会从新统计

Allocation Hot Spots(热点)

能统计出来开启时间段内使用某些方法或者xxx 的调用情况,相当于反向查询谁调用我了,开关后从新统计

上图显示println这个方法被 MathGame.run 和MathGame.main方法调用,以及他们这些方法一共调用了多少次和多少时间以及占用的内容大小

Class Tracker(类调用跟踪)

能检测指定类,的时间片段调用情况和调用频率来进行分析出来,是否有问题

选择需要监控的类或者包那那么当这些类进行被调用了,就会在视图上显示

可以看到在什么时间调用了 ,如果想暂停下来

检测各种调用情况

Call Tree (调用树)

通过关闭在开启可以重新统计

一般情况我们会过滤掉我们不想看到的内容

选择demo.就是过滤此包下的全部内容,想要恢复过滤内容可以在设置里进行恢复

Hot Spots(热点)

Call Graph(查看方法的调用树)

Method Statistics(方法统计)

开启后,这段时间内被调用的方法就会被拦截到

Call tracer 调用跟踪

开启后会记录这段时间内的方法执行情况包括内部执行情况,关闭后以树展示出来

从上图标记是红的,就能看出来方法内部执行了循环了

如果不想看到某方法那么可以隐藏掉

恢复显示

javascript XHR

JProfiler Origin Tracker_v1woXOcClDi.0.3.crx

链接: https://pan.baidu.com/s/1gnhtmBIcUYJbxecmrKojPg?pwd=rrpu 提取码: rrpu

要使用此功能,您必须使用Google Chrome 作为浏览器并安装 JProfiler 源跟踪器扩展。

运行前端时候点击下

然后插件颜色就变为红色了,那么就说明这个网站激活成功了

然后回到 jprofiler中就发现在监听中了

检测线程各种情况

注意: 如果请求的线程内部没有长时间的阻塞或者睡眠,一般都抓不到的,因为更新频率是2秒一次

Thread History(线程状态)

看着图很简单,除了绿色的其他如果时间过长都有问题,如果出现红色那么就是死锁测试方式就是打开监控后去访问有问题的功能,那么就能排查出来具体的问题, 找到问题的线程,那么我们就能去获取这个线程内部的堆栈,从堆栈中就能看出来问题是啥

Thread Monitor(线程列表)

如果线程过多, 在Thread History中不好找那么我们可以通过这个列表进行筛选,这样就能快速锁定有问题的线程了

Thread Dumps(线程堆栈)

通过上面的方法找到问题的线程方法后,然后我们就能在 Thread Dumps去查询对应方法的堆栈信息每次点击都能获取最新的全部线程堆栈信息,并且以树型展示

上图红色的就是死锁,告诉你这个锁发生在那个类多少行

这种都是第三方的请求,(有用户的有其他工具的,要会分辨,看堆栈就能看出来的)

类似于下图这种就不用看,这都是系统自己的请求或者其他的请求

上图是tomcat内部进行唤醒和挂起线程的操作,估计是线程池的东西

我们一般找下面这图出现的请求这个才是真实的请求

从上图就能看出来问题了,是内部一直在调用sleep,看堆栈是从下往上看,然后我们去看源码

数据库连接和sql语句执行情况

Mybaitis 和JDBC都一样

1秒(s)=1000毫秒 1毫秒(ms)=1000微妙 10万微妙(us)=1秒从上图可以看到我查询用户数量才使用了1毫秒不到

可以进行开关进行从新监控

请求情况

注意: 如果是请求是死循环或者死锁那么这个是监控不到的,必须这个请求能响应才行

至于其他的功能我基本没用到这里就不说了,用到了在补上

堆快照分析 导出当前堆的快照

导入对堆文件快照

分析堆快照

Current Object Set(当前堆的所有对象情况)

一般需要多个堆的快照进行对比,进行发现是否有内存泄露问题和对象增长速度过快问题,从而进行分析原因

Thread Dump(当前堆的线程情况)

可以查看到死锁,或者死循环或者长时间处于等待状态的线程,执行的方法和问题原因

比较快照

注意: (.hprof)文件的快照只支持内存比较 ,而jps快照是支持所有的,但是需要开启部分功能才行

我准备了3个同源的堆快照(.hprof),是在不同时间段获取的

同时选取需要对比的全部快照

当然也可以后期一个一个添加

然后按住Shift+鼠标左键选择2个需要对比的快照(一次最多对比2个快照,建议拿第一个快照和比第一个时间段大的快照进行依次对比)

内存比较

加号就是 333333.hprof这个快照比00000.hprof快照增加的最后下面有一个汇总,333333.hprof比00000.hprof 总体增加了还是减少了多少内存

对比不woXOcClDi同时间段快照,可以看出来内存是一直处于增长的,还是有减有增,如果一直维持在一个范围那么可以接收的 ,如果对比多个快照发现都是一直处于增长没有减过那么肯定是有问题的,时间长了就会发生oom了

调用情况比较

必须开启

然后保存为jps文件

然后就可以进行对比了


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java SpringMVC实现自定义拦截器
下一篇:Java SpringMVC的自定义异常类
相关文章

 发表评论

暂时没有评论,来抢沙发吧~