Jprofiler 监控cpu过高或者响应时间过长

CPU消耗过高的问题

在我们压测的过程中,可能会出现cpu消耗较高的情况(大于80%),那么通常出现cpu过高通常有两种情况:

  1. 接口性能好,比如响应时间<10ms,tps很高,此时CPU使用率高是正常的,不需要优化
  2. 接口性能不好,比如响应时间>200ms, tps很低,此时需要考虑优化

下面我们来压测一个cpu消耗较高的接口:

我们压测30个线程,持续运行脚本5分钟,可以看到我们的TPS平均只有300左右,响应时间大概在90ms左右。
在这里插入图片描述
那么我们来看一下cpu的数据,没有压测之前,cpu的空闲率还有90%多,但是开始执行压测之后,cpu使用率几乎到了100%。后面我们停止压测之后,cpu空闲率又恢复90%左右。
在这里插入图片描述

那么上方压测我们可以发现,主要问题就是在cpu上面,如果说cpu降下来,我们tps才能压上去。那么我们怎么去分析这个cpu使用过高的情况呢?

首先我们使用top命令,查看究竟是哪个进程占用我们cpu的资源过多。

我们可以看到有个java的进程,cpu达到了157%。(我的这台服务器是4G2核的,所以我们cpu最高可以达到200%)

在这里插入图片描述
使用Jprofiler定位响应时间过长的问题

通常做过性能测试的朋友都知道这个工具,Jprofiler是一个非常强大的工具,一般像线程死锁、阻塞、内存溢出等问题都可以进行监控。

jprofiler的安装

可以选择不同的操作系统安装包进行安装。

链接:https://pan.baidu.com/s/1BVYzp2zcU2Nb7077-FWywQ 密码:rvw9

我们服务器是linux的,所以我将该安装包上传到linux环境,并且 chmod +x jprofiler_linux_11_0.rpm 给文件添加相关权限。
在这里插入图片描述

上传成功之后,输入如下命令进行安装

 rpm -ivh jprofiler_linux_11_0.rpm 

在这里插入图片描述

进入 /opt/jprofiler11路径下,可以看到如下这些文件,则说明已经安装成功了。

在这里插入图片描述

然后在tomcat的bin目录下,找到catalina.sh文件,配置如下JVM参数。

JAVA_OPTS="-agentpath:/opt/jprofiler11/bin/linux-x64/libjprofilerti.so=port=8849,nowait"

配置成功之后,我们在安装客户端,直接安装到你本地电脑。

安装jprpfiler客户端

可以使用我这个licese key,或者也可以自己用注册机生成。

A-J11-Everyone#214297-3cdzjcgmyvi2j#452548

在这里插入图片描述

安装成功之后,则进入到这个页面。

在这里插入图片描述
点击图中圈出按钮区域
点
点击[New Session] —> [New Remote Integration]
在这里插入图片描述
选择连接远程机器,机器类型选择Linux X86
选择
选择JVM供应商,Oracle,JDK版本

在这里插入图片描述

在这里插入图片描述
添加我们要连接的远程服务器IP
在这里插入图片描述
在这里插入图片描述

输入我们服务器 jprofiler的安装地址
在这里插入图片描述
确认jprofile的默认端口是否正确,我这里用的是默认端口8849

这里有提示让我们把参数加入到配置中,我们前面已经将相关的配置配到tomcat中了。

在这里插入图片描述
最后下一步点击完成即可。

下面会问你需要选择哪种模式,第一个是所有的模式,第二个是cpu模式,程序中推荐使用第二个,第二个性能会好一点,但是这里我们为了学习,选择第一个,可以监控到更多数据。

在这里插入图片描述
点击ok就可以连接成功了。
在这里插入图片描述

注意:如果你的没有连接成功,首先排查防火墙是否关闭,还有就是jprofiler的端口没有被监听上,需要判断8849端口是否配置到了阿里云安全组中。

jprofile基础功能介绍

在这里插入图片描述
首先显示的是一些概要数据,映入眼帘的第一个是 Memory ,这是是JVM的数据,第一个是内存,第二个是GC是的活动情况,第三方是classes类,第四个是cpu的数据。鼠标光标移动至鼠标,可以查看详细的数据情况。

下方可以看到每一个数据的具体情况,如memory,我们还可以再上面去查看JVM每个区域的数据,默认是heap所有堆内存的数据,我们还可以筛选查看如Eden、S0、S1、old区域。还可以查看非堆的内存数据,如元空间。
在这里插入图片描述
下面这个是GC的活动图,我们可以看到一些GC的详情情况。

在这里插入图片描述
还有显示我们程序中所有的classes类
在这里插入图片描述
下方显示了我们线程的具体情况,可以看到线程的状态,runable、blocked、waiting等

在这里插入图片描述

如果你的jprofile用起来特别卡的话,可能是你JVM中的元空间配置比较小,可以稍微配置大一点。

还有这个我们现在可以查看所有堆的内存信息,那个对象占用的内存最大。
在这里插入图片描述
在这里我们可以看到所有的进程状态,这里的状态显示会比jprofile清晰一些。
在这里插入图片描述
这个功能也特别好用,如果说你的程序当前遇到线程锁的情况,他会检测到具体是哪个类导致的死锁。
还

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七月的小尾巴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值