在 Debian 上 Tomcat 占满 CPU 通常不是 Tomcat 本身的问题,而是「运行在 Tomcat 上的应用 + 系统环境」导致的。下面按最常见原因 → 排查方法 → 解决思路给你一个系统性的说明。
典型表现
常见代码问题
while(true)、递归无退出✅ 排查:
top
# 找到 tomcat/java 进程 PID
top -Hp PID
# 找到占用 CPU 的线程 ID(十进制)
printf "%x\n" 线程ID
# 转为 16 进制
jstack PID | grep 16进制线程 -A 30
可直接看到是哪行代码在跑
典型表现
top 中 java 占 CPU,但业务线程不多✅ 排查:
jstat -gcutil PID 1000
看:
FGC 很高OU 接近 100%✅ 解决:
JAVA_OPTS="-Xms2g -Xmx2g"
典型表现
✅ 排查:
netstat -antp | grep java
或:
ss -ntup
✅ 解决:
典型表现
✅ 解决:
典型问题
maxThreads 过大acceptCount 不合理✅ 示例(server.xml):
<Connector
port="8080"
maxThreads="200"
acceptCount="100"
connectionTimeout="20000"
/>
✅ 检查:
dmesg | tail
journalctl -xe
top
top -Hp PID
jstack PID > thread.txt
jstat -gcutil PID 1000
top / jstack 输出(可打码)我可以帮你直接定位是哪一类问题,甚至哪段代码。