java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > JProfiler11使用JVM调优

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

作者:胡安民

这篇文章主要介绍了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_v1.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 总体增加了还是减少了多少内存

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

调用情况比较

必须开启

然后保存为jps文件

然后就可以进行对比了

到此这篇关于JProfiler11使用教程之JVM调优的文章就介绍到这了,更多相关JProfiler11使用JVM调优内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文