针对java项目高CPU和高内存使用jstack命令来查找错误代码所在

来源:互联网 发布:怎么设计淘宝店标 编辑:程序博客网 时间:2024/06/07 02:13

本文从百度经验转载,记录下。

维护服务器时,会出现java进程在CPU、内存、硬盘上总是出现异常情况。

如何找到是哪些代码出现这些异常呢?

本文使用jstack来实现这个需求

工具/原料

  • java
  • jstack
  • ProcessExplorer
  • procexp

方法/步骤

  1. 先写一段代码来模拟一个耗CPU的线程

    代码:

    package chapter1;

    public class FindJavaThreadInTaskManager {    

        public static void main(String[] args) {        

            Thread thread = new Thread(new Worker());        

            thread.start();    

        }    

        static class Worker implements Runnable {        

            @Override        

            public void run() {            

                while (true) {                

                    System.out.println("Thread Name:" + Thread.currentThread().getName());           

                    }       

                 }    

            }

        }

    Windows如何使用jstack跟踪异常代码
  2. 执行上述代码,

    模拟一个CPU和IO利用率都高线程

    Windows如何使用jstack跟踪异常代码
  3. 打开任务管理,

    此例中,CPU利用率比较高java进程ID为7064

    Windows如何使用jstack跟踪异常代码
  4. 使用ProcessExplorer找到ID号为7064的进程

    Windows如何使用jstack跟踪异常代码
  5. 使用ProcessExplorer查看进程ID为7064的属性信息

    在Thread标签找到CPU利用率的线程信息,TID为6120(10进制)

    Windows如何使用jstack跟踪异常代码
    Windows如何使用jstack跟踪异常代码
  6. 将CPU利用率高的线程ID 6120(10进制)

    转换为0x17E8(16进制)

    Windows如何使用jstack跟踪异常代码
    Windows如何使用jstack跟踪异常代码
  7. 使用jstack查看进程7064的线程信息。

    找到线程号为0x17E8的线程

    命令:

    jstack -l  7064

    Windows如何使用jstack跟踪异常代码
  8. 查看第13行的代码信息,与实际情况相符。

    至此,找到引发CPU利用率高的代码

    Windows如何使用jstack跟踪异常代码


0 0
原创粉丝点击