zoukankan      html  css  js  c++  java
  • linux--关于JVM CPU资源占用过高的问题排查

    一、背景:

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

    # java -cp ./test-threads.jar com.spiro.Main

    二、现象:

        通过top命令查看当前CPU情况

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

    三、步骤

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

    # top -H -p2023

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

     结果:

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

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

     # jstack -l 2023 > tempfile.txt

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

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

     

    四、总结

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

  • 相关阅读:
    我的作业
    代码练习
    prority_queue 的用法 实例
    最短路问题专题
    键值对 Intent
    P103 任意两点之间的最短路问题 Floyd_warshall算法
    第6届山东省ACM省赛总结
    HDU 3247 Resource Archiver[AC自动机+最短路+dp]
    POJ 2778 DNA Sequence [AC自动机 + 矩阵快速幂]
    HDU 2896 病毒侵袭 [AC自动机]
  • 原文地址:https://www.cnblogs.com/mmz-tester/p/10452509.html
Copyright © 2011-2022 走看看