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

Posted 七月的小尾巴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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清晰一些。

这个功能也特别好用,如果说你的程序当前遇到线程锁的情况,他会检测到具体是哪个类导致的死锁。

以上是关于Jprofiler 监控cpu过高或者响应时间过长的主要内容,如果未能解决你的问题,请参考以下文章

JVM监控工具之JProfiler

SQL占用了CPU将近100%的资源

电脑cpu过高怎么办

Mysql占用过高CPU时的优化手段

Mysql占用过高CPU时的优化手段

电脑cpu占用过高怎么办解决方法