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)
时间: 2024-10-26 07:31:41

java 程序消耗 cpu 100% 查找方法的相关文章

jstack来分析。当linux出现cpu被java程序消耗过高时

我们使用jdk自带的jstack来分析.当linux出现cpu被java程序消耗过高时,以下过程说不定可以帮上你的忙: 1.top查找出哪个进程消耗的cpu高 21125 co_ad2    18   0 1817m 776m 9712 S  3.3  4.9  12:03.24 java                                                                                           5284 co_ad    

java程序入口main()方法浅析

java程序入口main()方法浅析 main()方法的方法签名 public static void main(String[] args) 方法签名讲解 ?public修饰符:java类由java虚拟机(JVM)调用,为了没有限制可以自由的调用,所以采用public修饰符. ?static修饰符:JVM调用这个主方法时肯定不是先创建这个主类的对象,再通过对象来调用方法,而是直接通过该类来调用这个方法,因此需要使用static修饰符修饰这个类. ?void返回值:主方法被JVM调用,将返回值返

java应用死循环排查方法或查找程序消耗资源的线程方法

如果遇到线上应用cpu飙升,并出现OutOfMemery怎么办? 首先线上应用的jvm配置要养成良好的习惯,增加一下配置则可以在jvm发生oom的时候自动dump日志了  -XX:+HeapDumpOnOutOfMemoryError   -XX:HeapDumpPath=/export/log/dump/jvm-oom.log 如果遇到线上应用特别消耗cpu资源怎么去排查? ps:首先普及一下linux中的java虚拟机线程实现方式:在Linux下面因为没有真正的线程,是用进程模拟的,有一个是

java程序导致cpu利用率100%的解决方法

1)先用top找出哪个线程占着cpu #top 查看cpu 100% 的进程号,如进程号为16459 #top -H -p 16459 然后再看是哪个pid 比较高   找到cpu为100%的PID PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND 16539 root      25   0 1673m 525m  10m R 98.9 13.3   6:36.83 java 16462 root      1

windows下揪出java程序占用cpu很高的线程 并找到问题代码 死循环线程代码

我的一个java程序偶尔会出现cpu占用很高的情况 一直不知道什么原因 今天终于抽时间解决了 系统是win2003 jvisualvm 和 jconsole貌似都只能看到总共占用的cpu 看不到每个线程分别占用的cpu呢 所以在windows平台上要找出到底是哪个线程占用的cpu还不那么容易,linux用top就简单多了 最后的解决方法: 1.找到java进程对应的pid. 找pid的方法是:打开任务管理器,然后点击 "查看" 菜单,然后点击 "选择列",把pid勾

windows下揪出java程序占用cpu很高的线程

1.找到java进程对应的pid.通过任务管理器.linux---top 2.然后把java进程导出快照.直接运行命令.stack -l 31372 > c:/31372.stack 3.在windows下只能查看进程的cpu占用率,要查看线程的cpu占用率要借助其他的工具,我这里用的是微软提供的 Process Explorer v15.3 右键点击需要查看的进程---properties linux下先输入top,然后再按shift+h 或"H",此时打开的是线程视图,pid

linu下java程序占用CPU和内存过高排错处理方案

1:通过jps命令查看所有进程pid. 2:使用top -p pid 针对你所要查的pid查看这个进程的CPU和内存以及负载情况 如图: 使用top -p pid  -H  查看针对每一个线程占用CPU情况进行查询 如果你发现某一个PID占用的CPU过高,就拿到这个PID转换成16进制 例如pid为12760转化成16进制31D8,大写换成小写 jstack 22821|grep -A 10 0x31d8 针对你的每个线程拿出占用CPU的堆栈信息,你可以根据这个去查找CPU的占用 如果你的内存占

记一次java程序占用cpu超高排查

1.首先通过top命令查看占用cpu过高的pid #top top - 18:07:25 up 48 days,  1:07,  3 users,  load average: 11.94, 11.90, 9.46Tasks: 271 total,   1 running, 270 sleeping,   0 stopped,   0 zombie%Cpu(s): 74.2 us,  0.8 sy,  0.0 ni, 24.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.

java程序 避免重复启动的方法

http://www.cppblog.com/biao/archive/2010/12/23/137254.html 1 package swingtest; 2 3 import java.io.File; 4 5 import java.io.RandomAccessFile; 6 7 import java.nio.channels.FileChannel; 8 9 import java.nio.channels.FileLock; 10 import java.util.concurr