在 CentOS 上运行 Java 程序出现卡顿,原因通常可以归为以下几类。下面按最常见 → 较少见的顺序说明,并给出排查思路。
这是 Java 卡顿的头号原因。
表现:
原因:
-Xmx 设置太小排查:
# 查看 GC 情况
jstat -gcutil <pid> 1000
# 查看堆内存
jmap -heap <pid>
解决:
-Xms2g -Xmx2g
-XX:+UseG1GC
Java 卡在:
排查:
iostat -x 1
top
常见问题:
/var/log 写满解决:
CentOS 服务器常跑:
导致 Java 被“挤”
排查:
top
free -h
CentOS 默认可能启用 swap。
Java 用 swap = 极慢
查看:
free -h
swapon -s
解决:
sysctl vm.swappiness=10
表现:
排查:
jstack <pid> | grep -A 20 BLOCKED
常见原因:
测试:
ping
telnet
curl
某些 Java 操作(文件、端口)被拦截
检查:
getenforce
老 CentOS(7 以下)可能:
建议:
# 1. 看整体
top
# 2. 看 Java
jstat -gcutil <pid> 1000
# 3. 看线程
jstack <pid> > thread.txt
# 4. 看磁盘
iostat -x 1
# 5. 看内存
free -h
你可以告诉我:
我可以直接帮你判断是 GC、IO、线程还是系统问题。