美文网首页
Java 高cpu消耗检测

Java 高cpu消耗检测

作者: 朝圣的路上 | 来源:发表于2017-11-19 13:56 被阅读73次

此篇博客主要记录当java程序出现较高的cpu消耗时如何检测和发现问题。基本思路是:

  1. 查找消耗cpu较高的进程;
  2. 追溯到该进程下的线程;
  3. 查看该线程下的堆栈日志。

linux下的主要步骤是通过top找到消耗cpu较高的进程,然后通过ps命令查看对应进程下的线程。最后通过jstack打印相应的堆栈日志,以找到相应的程序位置。此处推荐一篇博客。

《线上应用故障排查之一:高CPU占用》

windows下也是按照这个思路,但是windows下要找到相应的问题需要借助更多工具。这里就模拟一个问题,然后一步步追踪下去。

  1. 编写最简单的cpu消耗函数,并运行;
public class EmptyWhileTest {
    public static void main(String[] args){
        System.out.println("start to run an empty loop!");
        while(true){
            //do nothing
        }
    }
}
  1. 打开windows自带的任务管理器,查看消耗cpu较高的进程,可以看到PID=5620的进程,消耗cpu达到了25%;


    image.png
  2. 查找该进程下消耗cpu较高的线程,我这里用到了process explorer工具。下载解压直接运行就可以了。直接用这个,也可以省去第二步在任务管理器里面查看进程。找到相应的进程,然后右键,属性,就可以看到对应的线程了。

    进程.png 线程.png
  3. 线程ID是832,通过一些在线工具,换算成16进制就是0x340。


    image.png
  4. 切换到jdk的bin目录下面,用jstack打印相应的堆栈信息。

C:\Program Files\Java\jdk1.8.0_92\bin> jstack 5620

image.png
  1. 找到nid=0x340的线程,可以看到,EmptyWhileTest.java:6,正是我们产生空循环的地方。

这个就是简单的查找并定位cpu高消耗进程的方式。

相关文章

  • Java 高cpu消耗检测

    此篇博客主要记录当java程序出现较高的cpu消耗时如何检测和发现问题。基本思路是: 查找消耗cpu较高的进程; ...

  • App性能测试2

    今天我也只总结资源消耗这块,先谈谈CPU 1.cpu cpu检测我们要分3种情况: 1.在空闲时间的消耗,基本没大...

  • 如何定位java进程cpu占用过高

    如何定位java进程cpu占用过高 如何定位java进程cpu占用过高,分三步走 根据cpu消耗,打印出pid进程...

  • 3步定位cpu占比过高或者oom

    jstack检测cpu高步骤一:查看cpu占用高进程 步骤二:查看cpu占用高线程 步骤三:转换线程ID 步骤四:...

  • 性能指标

    CPU CPU资源利用率很高的话,需要看CPU消耗User、Sys、Wait哪种状态。 如果CPU User非常高...

  • 【Xcode Instruments】Time Profiler

    作用: 检测应用CPU的使用情况,可以看到应用程序中各个方法正在消耗CPU时间。 (使用大量CPU不一定是个问题。...

  • iOS性能分析-Xcode Instruments Time P

    Time Profiler时间分析工具用来检测应用CPU的使用情况。可以看到应用程序中各个方法消耗CPU的时间。 ...

  • 最消耗CPU的java线程?

    当我们运行程序的时候,如果导致CPU大量被消耗,可能是我们的Java程序出现了问题,就需要定位到可能消耗大量CPU...

  • cpu飙升排查

    一、TOP查看 可以看到进程id为8398的进程消耗cpu特别高,然后开始分析进程下所有的线程消耗cpu的情况 二...

  • 《移动App性能评测与优化》——电量篇总结

    电量优化方法: 优化方法一:CPU时间片 当应用退到后台运行时,尽量减少应用的主动运行。 当检测到CPU时间片消耗...

网友评论

      本文标题:Java 高cpu消耗检测

      本文链接:https://www.haomeiwen.com/subject/fovuvxtx.html