在Linux中tomcat占用CPU过高可以通过打印CPU文件来解决

第一步,查看异步处理的多线程程序,是不是哪个程序死锁了或者一直运行,不释放。若没有发现程序发生死循环,则说明不是这个问题导致的。

第二步,若不是异步处理的多线程程序导致tomcat占用CPU过高,则可以使用命令打印堆栈,得到所有的运行线程。

进入/usr/local/jdk1.7.0_80/bin文件夹打印堆栈内容

jstack在jdk1.8版本中不可用,只能使用在jdk1.7版本中

命令:cd /usr/local/jdk1.7.0_80/bin

jstack pid > /usr/local/test.stack

第三步,在shell中使用命令查找是哪几个线程在占用CPU过高,占用CPU时间过长。

命令:top -c

注意:点击"shift+M",按照内存大小排序;点击"shift+P",按照CPU大小排序。

第四步,得到占用CPU过高,占用CPU时间过长的线程的PID值,然后使用命令将PID值转成十六进制。

命令:printf "%x\n" PID

第五步,通过线程PID值转换的十六进制值在刚刚打印出来的堆栈文件中查找具体的线程。找到具体的线程之后,就可以看到具体出问题的代码行,然后在源码中查找一下,看看是否存在有一个死循环。若在源码中存在有一个死循环,则修改代码使源码不存在死循环即可。

相关推荐
zzzzzz3101 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
XIAOHEZIcode1 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220702 天前
如何搭建本地yum源(上)
运维
A小辣椒3 天前
TShark:Wireshark CLI 功能
linux
A小辣椒3 天前
TShark:基础知识
linux
AlfredZhao3 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao4 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334664 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪4 天前
linux 拷贝文件或目录到指定的位置
linux
大树885 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai