Java 应用程序(Tomcat)CPU 负载过高的解决方案

1. 现象:

在tomcat中部署java的web应用程序,过一段时间后出现tomcat的java进程持续占用cpu高达100%,导致web程序访问受阻。

2. 分析原因

  1. 进行大量的数据计算
  2. 出现死循环

3. 解决办法

1) 首先使用 top 命令或者 ps -ef | grep java 找到占用 CPU 过高的进程ID,即 PID,如图:

top

2) 找出该进程中占用 CPU 过高的线程,且执行时间较长。命令如下:

1
# top H -p 23842

或者

1
# ps -mp 23842 -o THREAD,tid,time

注意:此命令只有 PID 是你要替换的值,其他照抄即可。

如下图:

thread

由此图可知,23876 这个线程占用 CPU 较高。

3)将线程ID转换成 16 进制

1
2
# printf "%x\n" 23876
5d44

4)通过 jstack 命令找到对应的线程栈,从而找到对应的代码

1
# jstack 23842 | grep 5d44 -A 40

code

关于命令说明:

jstack PID:输出 Java 对应进程的线程栈信息

grep 5d44 -A 40 : 表示搜索 5d44 内容所在的行,并显示该行下面 40 行的信息。

本文标题:Java 应用程序(Tomcat)CPU 负载过高的解决方案

文章作者:javaliu

发布时间:2018年12月28日 - 11:50

最后更新:2019年09月11日 - 09:53

原始链接:https://www.javaliu.com/2018/12/28/Java-loader-cpu-high/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我的继续创作