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精确找到异常代码的
     
     
  • 相关阅读:
    IE11开发人员工具 js脚本debugger调试
    Dynamics CRM OData方式进行增删改查时报错的问题
    Get Form type using javascript in CRM 2011
    Dynamics CRM 同一实体多个Form显示不同的Ribbon按钮
    Dynamics CRM 通过OData查询数据URI中包含中文的情况
    打印控件
    spark
    zookeeper集群配置与启动——实战
    javascript学习
    etcd
  • 原文地址:https://www.cnblogs.com/yepei/p/7080513.html
Copyright © 2011-2022 走看看