0
点赞
收藏
分享

微信扫一扫

Java高手是怎么使用jstack精确找到异常代码的

java程序CPU利用率高怎么办

请jstack神器来帮忙

 

本文介绍Linux环境下使用jstack定位问题的秘笈

  1.  

一个CPU密集型线程的demo:



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());

}

}

}

}


  1. ​​​

    Java高手是怎么使用jstack精确找到异常代码的_java

    ​​
  2.  
    将上述代码打成Jar。
    在Linux上执行上述代码
     
     
    命令:
    java -jar JavaStudy.jar

    ​​​

    Java高手是怎么使用jstack精确找到异常代码的_十进制数_02

    ​​
  3.  
    找到CPU利用率持续比较高的进程,获取进程号,此处PID为3036
     
     
    命令:
    top

    ​​​

    Java高手是怎么使用jstack精确找到异常代码的_十进制数_03

    ​​
  4.  
    找到上述进程中,CPU利用率比较高的线程号TID(十进制数),此处为3046
     
     
    命令:
    ps p 3036 -L -o pcpu,pid,tid,time,tname,cmd

    ​​​

    Java高手是怎么使用jstack精确找到异常代码的_十进制数_04

    ​​
  5.  
    将获取的线程号(十进制数)转换成十六进制,此处为0xb46
     
     
    命令:
    printf "%x\n"  3046

    ​​​

    Java高手是怎么使用jstack精确找到异常代码的_jar_05

    ​​
  6.  
    查看进程PID为3036中
    nid为0xb46的线程信息。
     
     
    命令:
    jstack -l 3036

    ​​​

    Java高手是怎么使用jstack精确找到异常代码的_十进制数_06

    ​​
  7.  
    总结:
    可以看到jstack命令的输出结果是相当准确的:
    显示耗CPU比较高的代码与实际情况相同,都是第13行。
     
     
    放心的用吧。
    Enjoy youself!

    ​​​

    Java高手是怎么使用jstack精确找到异常代码的_java_07

    ​​



举报

相关推荐

0 条评论