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

相关推荐
tianyuanwo1 分钟前
SSH连接底层原理与故障深度解析:从协议握手到安全运维
运维·安全·ssh
f***24112 分钟前
不常用,总是忘记:nginx 重启指令
运维·windows·nginx
R***z1014 分钟前
【Sql Server】sql server 2019设置远程访问,外网服务器需要设置好安全组入方向规则
运维·服务器·安全
梁正雄5 分钟前
5、python 模块与包
linux·服务器·python
de之梦-御风7 分钟前
【远程控制】开箱即用的 RustDesk 自建服务端完整 Docker Compose 模板
运维·docker·容器
axihaihai14 分钟前
腾讯云镜像仓库访问问题
linux·服务器·腾讯云
xuanloyer14 分钟前
linux基础学习--学习bash
linux·学习·bash
happytree00115 分钟前
suricata之Threads
linux
宇钶宇夕18 分钟前
魏德米勒 UR20-FBC-PN-IRT-V2 从站全解析:产品特性、模块详情、接线图与地址配置指南(地址修改部分)
运维·自动化
嘻哈baby18 分钟前
从零搭建家庭All-in-One服务器:300元成本实现企业级功能
运维·服务器