linux上找出Java占用CPU过高的代码

突然发现项目页面打开超级慢,就去服务器上看了看也没有报错,发现cpu占用满了,但是这个服务里并没有太多的业务逻辑,只能查找一波了。

1.top查找出哪个进程消耗的cpu高 

直接 top ,发现如图 6415进程占用最高

2.top 占用cpu最高的进程,然后shift+h查找出哪个线程消耗的cpu高 

top -p 6415

然后shift+h

然后我们随便找一个线程用jstack分析

3.将需要的线程ID转换为16进制格式:

printf "%x\n" 7065  

 转化出来是1b99 

4.jstack查找这个线程的信息 
jstack [进程]|grep -A 10 [线程的16进制] ,即:

jstack 6415|grep -A 10 1b99 

-A 10表示查找到所在行的后10行。7065用计算器转换为16进制1b99,注意字母是小写。 
结果: 

"XNIO-1 task-45" #156 prio=5 os_prio=0 tid=0x00007ff5fc032800 nid=0x1b99 runnable [0x00007ff5c2de9000]
   java.lang.Thread.State: RUNNABLE
	at java.util.Random.next(Random.java:204)
	at java.util.Random.nextDouble(Random.java:532)
	at java.lang.Math.random(Math.java:773)
	at com.***.***.***.modules.controller.NewsController.random(NewsController.java:854)
	at com.***.***.***.modules.controller.NewsController.newsList(NewsController.java:185)
	at com.***.***.***.modules.controller.NewsController$$FastClassBySpringCGLIB$$7cb9cc2e.invoke(<generated>)
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)

可以帮助定位问题代码,或者给出问题出现的线索。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值