linux下查找 java web 应用 cpu占用过高的方法

java性能调优里有cpu消耗分析,现在我把cpu使用过高的分析过程记录下来(一般分us过高,或者sy过高,本章中以us过高为例)

1、linux下使用top或者pidstat命令查看进程消耗情况,下图使用top命令

说明:

us使用过高,也叫用户空间占用cpu过高。进程为:31808

2、接下来我们查找占用cpu较高的线程。按shift+H 键,然后按回车,如下图

说明:

可以看到有两个线程较高,31849和31850


3、我们先查找31849线程过高的代码,先把它转化为16进制,可以使用printf %x xxx,如下图,转化后为7c69



4、最后使用jstack命令定位代码。其中 -A 4 是查找所在行的后4行,7c69为16进制线程pid。



最后,我们可以定位到ImportResThread的run方法。

下面为我测试用的线程类



原因:执行线程没有任何挂起动作,且一直执行,导致CPU 没有机会去调度执行其他的线程。导致us过高。

ps:sy过高的原因一般为线程数过过,竞争激烈,上下文切换频繁。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值