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

相关推荐
2501_9399090515 分钟前
Docker(3)
运维·docker·容器
irisart18 分钟前
第二章【NGINX 开源功能】—— 四层反向代理
运维·nginx·开源
丁劲犇20 分钟前
使用Manjaro制作SDR业余软件无线电LiveDVD发行版
linux·archlinux·sdr·manjaro·livecd·业余软件无线电·livedvd
被遗忘的旋律.20 分钟前
Linux驱动开发笔记(十五)——MISC驱动实验
linux·驱动开发·笔记
大聪明-PLUS29 分钟前
深入 initrd
linux·嵌入式·arm·smarc
AI+程序员在路上30 分钟前
linux下网络IP、网关及路由设置详解
linux·网络·tcp/ip
iconball32 分钟前
个人用云计算学习笔记 --33 Containerd
运维·笔记·学习·云计算
工程师华哥35 分钟前
2026新版华为数通认证HCIP-CT题库试卷,涵盖拖拽题、判断题、填空题、多选题、单选题等多种考试题型和题目(附答案解析)
运维·网络工程师·华为认证·华为hcip·华为数通认证·核心路由·hcip题库
wabil36 分钟前
VSCode远程调试Linux的GUI程序
linux·ide·vscode
lbb 小魔仙39 分钟前
【Linux】Linux 安全实战:防火墙配置 + 漏洞修复,符合企业合规标准
linux·运维·安全