zoukankan      html  css  js  c++  java
  • java 程序消耗 cpu 100% 查找方法

    问题原因:由于HashMap是非线程安全的,在多线程访问时,造成死循环。 

    查找问题方法: 
    1.

    Java代码  收藏代码
    1. top  


    找出最耗费cpu的进程号 如:27377 

    2.

    Java代码  收藏代码
    1. top -p 27377 -H  


    找出此进程下的所有线程,然后找出最耗cpu线程号 如:27433 

    3.

    Java代码  收藏代码
    1. python  hex(27433)   


    将十进制数转为16进制 如:0x6b29 

    4.

    Java代码  收藏代码
    1. jstack 27377 >cpu.log  


    将此进程号的Java堆栈信息打印到文件中 

    5.

    Java代码  收藏代码
    1. grep 0x6bz8 cpu.log  


    查看java堆栈中的线程nid 如: 
    "foundationTaskExecutor-2" prio=10 tid=0x00007f064c041000 nid=0x6b28 runnable [0x00007f069f5da000] 

    6.

    Java代码  收藏代码
    1. vim cpu.log  


    查找nid=0x6b28的内容 如: 

    Java代码  收藏代码
      1. "foundationTaskExecutor-2" prio=10 tid=0x00007f064c041000 nid=0x6b28 runnable [0x00007f069f5da000]  
      2.    java.lang.Thread.State: RUNNABLE  
      3.         at java.util.HashMap.get(HashMap.java:320)  
      4.         at ***********************************(WareServiceImpl.java:64)  
      5.         at ***********************************(Mid2FoundationTask.java:127)  
      6.         at ***********************************(Mid2FoundationTask.java:27)  
      7.         at ***********************************$FoundationThreadImpl.run(Mid2FoundationTask.java:86)  
      8.         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)  
      9.         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)  
      10.         at java.lang.Thread.run(Thread.java:722)  
  • 相关阅读:
    float
    老师的通病
    无题
    BufferedReader
    剩余定理
    ActionScript 多图加载 按图顺序索引
    C++ Socket 编程
    设计高可用和高负载的网站系统
    提高网站速度的最佳实践【翻译】
    把哈希表存储到数据库中
  • 原文地址:https://www.cnblogs.com/gisblogs/p/4235811.html
Copyright © 2011-2022 走看看