Linux   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了linux--关于JVM CPU资源占用过高的问题排查大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

一、背景:     先执行一个java程序里面开了两个线程分别都在while循环做打印操作。     # Java -cp ./test-threads.jar com.spiro.Main 二、现象:     通过top命令查看当前CPU情况 可以看到有个java进程占用CPU过高,下面来排查是什么线程的什么代码导致CPU过高。   三、步骤     先获得PID为2023,上图可以看到,或者通

一、背景:@H_944_19@

    先执行一个java程序里面开了两个线程分别都在while循环做打印操作。    @H_944_19@

# Java -cp ./test-threads.jar com.spiro.Main@H_944_19@

二、现象:@H_944_19@

    通过top命令查看当前cpu情况@H_944_19@

linux--关于JVM CPU资源占用过高的问题排查@H_944_19@@H_944_19@@H_944_19@

可以看到有个java进程占用cpu过高,下面来排查是什么线程的什么代码导致cpu过高。@H_944_19@

 @H_944_19@

三、步骤@H_944_19@

    先获得PID2023,上图可以看到,或者通过jps命令获取。 执行以下命令:   @H_944_19@

 @H_944_19@

# top -H -p2023@H_944_19@

说明: -H 显示线程,-p 是指定进程@H_944_19@

 结果:@H_944_19@

linux--关于JVM CPU资源占用过高的问题排查@H_944_19@@H_944_19@@H_944_19@

 可以看到两个cpu占用较高的线程,记下PID 20332034  此处的PID即为线程ID标识) ,将其从十进制转成十六进制表示,可通过windows自带的计算器来转。得到结果分别为7f17f2@H_944_19@

 再通过jstack命令获取当前线程栈,可暂时保存到一个文件tempfile.txt中;  @H_944_19@

 # jstack -l 2023 > tempfile.txt@H_944_19@

tempfile.txt中查找nid=0x7f1的线程: @H_944_19@

linux--关于JVM CPU资源占用过高的问题排查@H_944_19@@H_944_19@@H_944_19@

可以看到我们找到的线程Thread-0,以及该线程的状态和正在执行的代码行,本例中显示当前正在执行Worker类的15行。然后可去代码中查看不合理的逻辑@H_944_19@

 

linux--关于JVM CPU资源占用过高的问题排查@H_944_19@@H_944_19@@H_944_19@

 @H_944_19@

四、总结@H_944_19@

    方法很有用,多次使用该方法定位出程序中的性能问题,在此分享和记录。@H_944_19@

大佬总结

以上是大佬教程为你收集整理的linux--关于JVM CPU资源占用过高的问题排查全部内容,希望文章能够帮你解决linux--关于JVM CPU资源占用过高的问题排查所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。