jprofiler_windows-x64_11_0_2
链接:https://pan.baidu.com/s/1jWyPYHkuDNcUo_ylONanMQ
提取码:1234
然后打开破解机器 KeyGen.exe
链接:https://pan.baidu.com/s/1bINO2lcy5jWE_U2fkKNONg
提取码:1234
–来自百度网盘超级会员V6的分享
我们启动一个本地项目weblogic,Jboss,tomcat或者springboot都行,我们就拿主流的springboot来说(其实内嵌的就是tomcat)
然后我们打开jprofiler,监控指定的程序
我的服务器是x86的uname -m
在需要监听的目标服务器上安装jprofiler_linux_11_0_2.tar.gz
链接:https://pan.baidu.com/s/1U3aj7hDR4-_jU9oj2wNG_A
提取码:1234
我是放在/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
这个不用多说,看说明就知道啥东西
我们可以指定开启时间内记录对象的的使用情况,这样就能更佳快速的找到问题 ,每次开关都会从新统计,还有最关键的就是 Mark Current 这个按钮,他可以标记现在对象的使用情况为绿色,那么行增的对象就是红色了,这样一对比就知道那个对象有问题了
右键可以删除标记
开始后统计调用情况,每次开关都会从新统计
能统计出来开启时间段内使用某些方法或者xxx 的调用情况,相当于反向查询谁调用我了,开关后从新统计
上图显示println这个方法被 MathGame.run 和MathGame.main方法调用,以及他们这些方法一共调用了多少次和多少时间以及占用的内容大小
能检测指定类,的时间片段调用情况和调用频率来进行分析出来,是否有问题
选择需要监控的类或者包那那么当这些类进行被调用了,就会在视图上显示
可以看到在什么时间调用了 ,如果想暂停下来
通过关闭在开启可以重新统计
一般情况我们会过滤掉我们不想看到的内容
选择demo.就是过滤此包下的全部内容,想要恢复过滤内容可以在设置里进行恢复
开启后,这段时间内被调用的方法就会被拦截到
开启后会记录这段时间内的方法执行情况包括内部执行情况,关闭后以树展示出来
从上图标记是红的,就能看出来方法内部执行了循环了
如果不想看到某方法那么可以隐藏掉
恢复显示
JProfiler Origin Tracker_v1.0.3.crx
链接:https://pan.baidu.com/s/1wcTRRPHl2wanKWDRwsXhwQ
提取码:1234
要使用此功能,您必须使用Google Chrome 作为浏览器并安装 JProfiler 源跟踪器扩展。
运行前端时候点击下
然后插件颜色就变为红色了,那么就说明这个网站激活成功了
然后回到 jprofiler中就发现在监听中了
注意: 如果请求的线程内部没有长时间的阻塞或者睡眠,一般都抓不到的,因为更新频率是2秒一次
看着图很简单,除了绿色的其他如果时间过长都有问题,如果出现红色那么就是死锁
测试方式就是打开监控后去访问有问题的功能,那么就能排查出来具体的问题, 找到问题的线程,那么我们就能去获取这个线程内部的堆栈,从堆栈中就能看出来问题是啥
如果线程过多, 在Thread History中不好找那么我们可以通过这个列表进行筛选,这样就能快速锁定有问题的线程了
通过上面的方法找到问题的线程方法后,然后我们就能在 Thread Dumps去查询对应方法的堆栈信息
每次点击都能获取最新的全部线程堆栈信息,并且以树型展示
上图红色的就是死锁,告诉你这个锁发生在那个类多少行
这种都是第三方的请求,(有用户的有其他工具的,要会分辨,看堆栈就能看出来的)
类似于下图这种就不用看,这都是系统自己的请求或者其他的请求
上图是tomcat内部进行唤醒和挂起线程的操作,估计是线程池的东西
我们一般找下面这图出现的请求这个才是真实的请求
从上图就能看出来问题了,是内部一直在调用sleep,看堆栈是从下往上看,然后我们去看源码
Mybaitis 和JDBC都一样
1秒(s)=1000毫秒 1毫秒(ms)=1000微妙 10万微妙(us)=1秒
从上图可以看到我查询用户数量才使用了1毫秒不到
可以进行开关进行从新监控
注意: 如果是请求是死循环或者死锁那么这个是监控不到的,必须这个请求能响应才行
至于其他的功能我基本没用到这里就不说了,用到了在补上
一般需要多个堆的快照进行对比,进行发现是否有内存泄露问题和对象增长速度过快问题,从而进行分析原因
可以查看到死锁,或者死循环或者长时间处于等待状态的线程,执行的方法和问题原因
注意: (.hprof)文件的快照只支持内存比较 ,而jps快照是支持所有的,但是需要开启部分功能才行
我准备了3个同源的堆快照(.hprof),是在不同时间段获取的
同时选取需要对比的全部快照
当然也可以后期一个一个添加
然后按住Shift+鼠标左键选择2个需要对比的快照(一次最多对比2个快照,建议拿第一个快照和比第一个时间段大的快照进行依次对比)
加号就是 333333.hprof这个快照比00000.hprof快照增加的
最后下面有一个汇总,333333.hprof比00000.hprof 总体增加了还是减少了多少内存
对比不同时间段快照,可以看出来内存是一直处于增长的,还是有减有增,如果一直维持在一个范围那么可以接收的 ,如果对比多个快照发现都是一直处于增长没有减过那么肯定是有问题的,时间长了就会发生oom了
必须开启
然后保存为jps文件
然后就可以进行对比了
点赞 -收藏-关注-便于以后复习和收到最新内容有其他问题在评论区讨论-或者私信我-收到会在第一时间回复如有侵权,请私信联系我感谢,配合,希望我的努力对你有帮助^_^
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_45203607/article/details/123473969
内容来源于网络,如有侵权,请联系作者删除!