java 程序 CPU 100%的解决办法

###Linux环境 

top查到25812进程的CPU高

根据进程的PID找到 该进程中CPU使用率最高的线程号 26001 使用了72%

ps -mp 25812 -o THREAD,tid,time |sort -n -k 2 按线程使用cpu排序 或

ps -mp 25812 -o THREAD,tid,time |awk ‘/root/ && $2>50 {print $0}’  输出大于50的线程

转为16进制

执行 kill -3  15812 生成进程当前线程信息--javacore

通过cat javacore |grep 0x6591 -C10 查看线程具体内容

 

###AIX

topas 

 

 

‭ps -mp 4194678 -o THREAD,tid,time |awk '$6 > 30 {print $0}' >> text3

第一列加了16进制之后

text3:
10F037F‬ - - - 17761151 R 43 110 0 - 400000 - - - 17761151 -
‭11A0107‬ - - - 18481415 R 37 106 0 - 400000 - - - 18481415 -
‭1740211‬ - - - 24379921 R 41 109 0 - 400000 - - - 24379921 -
‭2200091‬ - - - 35651729 R 38 107 0 - 400000 - - - 35651729 -
‭2240133‬ - - - 35914035 R 39 108 0 - 400000 - - - 35914035 -
USER PID PPID TID ST CP PRI SC WCHAN F TT BND COMMAND

 

 

 10F037F‬ 使用了43%

 

 

 

 

 直接的分析工具arthas  ,show-busy-java-threads这个脚本

 https://blog.csdn.net/qq_34741165/article/details/89527727

###win

生成javacore  

jstack -l -r -pid

jsp文件 IBMJDK

<%
com.ibm.jvm.Dump.JavaDump();
%> 

放到nchome/hotwebs/nc_web/ 访问27.0.0.1:9081/javacore.jsp 即可

使用processexplorer  查到 TID 转为16进制 在javacore中查找堆栈 如下连接下载

https://docs.microsoft.com/zh-cn/sysinternals/downloads/process-explorer

 

javacore 及heappdump 生成下载地址 https://blog.csdn.net/zfr629/article/details/52993813

各OS CPU使用率高分析

http://www.blogjava.net/jesson2005/articles/416278.html?opt=admin

 

 

 

 

https://blog.csdn.net/qq_34741165/article/details/89527727

https://alibaba.github.io/arthas/

https://www.cnblogs.com/shihaiming/p/11451583.html

 

posted @ 2019-04-23 14:32  Qtong  阅读(3072)  评论(0编辑  收藏  举报