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

相关推荐
冷小鱼1 小时前
从 Docker 到容器编排:框架选型与指令详解实战指南
运维·docker·容器·k8s·docker compose·docker swarm
nashane1 小时前
HarmonyOS 6学习:解决无限循环动画被打断后“消失“的诡异问题
运维·nginx·harmonyos 5
csg11071 小时前
智慧养殖篇(四):猪场自动化饲喂与疫病预警
运维·单片机·嵌入式硬件·物联网·自动化
java_logo1 小时前
轻量AI接口网关一键部署|calciumion/new-api Windows/Linux Docker 部署全教程
linux·人工智能·windows·one api·calciumion·ai网关部署·one api 部署
原来是猿1 小时前
Linux - 【理解进程组、会话与作业控制】
linux·运维·服务器
怀旧,2 小时前
【Linux网络编程】1. 网络基础概念
linux·网络
程序员老邢2 小时前
【技术底稿 34】文件存储服务域名切换 & S3 兼容性问题全复盘
运维·文件存储·seaweedfs·程序员日常·技术底稿·s3兼容·线上问题复盘
怀旧,2 小时前
【Linux网络编程】5. 应用层协议 HTTP
linux·网络·http
码点滴2 小时前
用自然语言指挥 K8s 集群:AI 运维 Agent 的架构原理与可运行原型
运维·人工智能·kubernetes