zoukankan      html  css  js  c++  java
  • 高手是如何定位内存问题的代码位置的

    java程序CPU利用率高怎么办

    请jstack神器来帮忙

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

    工具/原料

    • Linux
    • java
    • thread
    • jstack
    • top
    • ps
    • printf
    • Runnable

    方法/步骤

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

                   }       

               }   

           }

      }

      高手是怎么使用jstack精确找到异常代码的
    2. 2将上述代码打成Jar。

      在Linux上执行上述代码

      命令:

      java -jar JavaStudy.jar

      高手是怎么使用jstack精确找到异常代码的
    3. 3    找到CPU利用率持续比较高的进程,获取进程号,此处PID为3036 

      命令:

      top

      高手是怎么使用jstack精确找到异常代码的
    4. 4 找到上述进程中,CPU利用率比较高的线程号TID(十进制数),此处为3046

      命令:

      ps p 3036 -L -o pcpu,pmem,pid,tid,time,tname,cmd

      高手是怎么使用jstack精确找到异常代码的
    5. 5  将获取的线程号(十进制数)转换成十六进制,此处为0xb46

      命令:

      printf "%x "  3046

      高手是怎么使用jstack精确找到异常代码的
    6. 6 查看进程PID为3036中

      nid为0xb46的线程信息。

      命令:

      jstack -l 3036

      高手是怎么使用jstack精确找到异常代码的
    7. 总结:

      可以看到jstack命令的输出结果是相当准确的:

      显示耗CPU比较高的代码与实际情况相同,都是第13行。

      放心的用吧。

      Enjoy youself!

      高手是怎么使用jstack精确找到异常代码的
     
     
  • 相关阅读:
    R-FCN、SSD、YOLO2、faster-rcnn和labelImg实验笔记
    yolov3的anchor机制与损失函数详解
    CV资料推荐
    测试用例设计方法总结
    测试需求分析
    bug生命周期
    linux命令一
    linux 命令二
    linux 命令三
    mysql数据库和禅道安装
  • 原文地址:https://www.cnblogs.com/yepei/p/7080513.html
Copyright © 2011-2022 走看看