JVM热点CPU问题

本文介绍了如何使用VisualVM工具监控和分析JVM的CPU性能,包括通过监视标签查看CPU使用率和垃圾回收活动,以及在Profiler标签下进行详细分析。通过CPU性能分析会话,可以定位到执行时间最长的方法,例如AprEndpoint()。当CPU过高时,文章提供了一套排查步骤,包括使用top、ps、printf、jstack等命令,最终找到问题代码行SellerTransportModel.java:387。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

VisualVM 能够监控应用程序在一段时间的 CPU 的使用情况,显示 CPU 的使用率、方法的执行效率和频率等相关数据帮助我们发现应用程序的性能瓶颈。我们可以通过 VisualVM 的监视标签和 Profiler 标签对应用程序进行 CPU 性能分析。

在监视标签内,我们可以查看 CPU 的使用率以及垃圾回收活动对性能的影响。过高的 CPU 使用率可能是由于我们的项目中存在低效的代码,可以通过 Profiler 标签的 CPU 性能分析功能进行详细的分析。如果垃圾回收活动过于频繁,占用了较高的 CPU 资源,可能是由内存不足或者是新生代和旧生代分配不合理导致的等。

在 Profiler 标签,点击“CPU”按钮启动一个 CPU 性能分析会话 ,VisualVM 会检测应用程序所有的被调用的方法。当进入一个方法时,线程会发出一个“method entry”的事件,当退出方法时同样会发出一个“method exit”的事件,这些事件都包含了时间戳。然后 VisualVM 会把每个被调用方法的总的执行时间和调用的次数按照运行时长展示出来。

此外,我们也可以通过性能分析结果下方的方法名过滤器对分析结果进行过滤。

 

点击取样器Sampler, 点击“CPU”按钮,启动CPU性能分析会话,VisualVM 会检测应用程序所有的被调用的方法,

在CPU samples tab 下可以看到我们的方法AprEndpoint() 的自用时间最长, 如下图:

cpu过高处理步骤:

 

1、top找出cpu高的java进程号:如 9592

2、ps -mp 14710 -o THREAD,tid 查看cpu占用time最高的线程编号28178

3、执行 printf "%x\n" 28178 获取线程十六进制地址6e12 (十六进制一定要小写)

 

4、执行jstack  pid 14710 > /DATA/home/test.txt

5、在文档内查找线程;

 

"http-bio-8121-exec-199" daemon prio=10 tid=0x00007f751804b800 nid=0x6e12runnab  le [0x00007f74ebcf9000]
   java.lang.Thread.State: RUNNABLE
        at com.ejavashop.model.seller.SellerTransportModel.getFee(SellerTransportModel.java:387)
        at com.ejavashop.model.seller.SellerTransportModel.calculateTransFeeFuil  (SellerTransportModel.java:312)
        at com.ejavashop.model.cart.CartModel.getCartInfoByChooseId(CartModel.ja  va:1134)
        at com.ejavashop.service.impl.cart.CartServiceImpl.getCartInfoByChooseAn  dId(CartServiceImpl.java:201)


5、排查代码SellerTransportModel.java:387

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值