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

相关推荐
星辰徐哥几秒前
鸿蒙PC平台 Gnote 笔记应用适配实战:从 Linux 到 鸿蒙PC 的 Electron 迁移
linux·笔记·electron·harmonyos·gnote
一直C13 分钟前
Linux应用软件编程|嵌入式轻量级数据库SQLite3完整学习笔记(命令行+C语言API)
linux·sqlite
Jay Kay13 分钟前
RDMA中CQ为什么用轮询?——从CQ、Doorbell到GID的深度解析
运维·服务器·网络
神威难绷泪21 分钟前
TCP并发服务器:多进程 多线程 IO多路复用(select poll epoll)
linux·ipc·tcp并发服务器
kruptos24 分钟前
嵌入式 Linux 驱动开发:第一个内核模块怎么写?
linux·运维·驱动开发·嵌入式硬件
wangqiaowq26 分钟前
langfuse linux下的安装部署
linux·运维·服务器
NeilYuen30 分钟前
用RDMA实现文件传输
linux
青禾83731 分钟前
Docker 从入门到实践:镜像、容器、数据卷与 Docker Compose
运维·docker·容器
Discipline~Hai41 分钟前
Linux网络编程05-sqlite3数据库
linux·c语言·网络·数据库·sqlite·linux应用软件编程
wdfk_prog1 小时前
Docker 开发环境到底要交付什么:镜像、源码与运行脚本
运维·docker·容器