在 Ubuntu(Linux)环境下 Java 线程卡顿,通常不是单一原因,而是CPU、内存、IO、锁、GC、系统配置等多方面叠加。下面按最常见 → 较少见系统梳理。
排查:
top
htop
pidstat -p <pid> 1
Java 层:
jstack <pid>
看线程是否在 RUNNABLE 且长期占用 CPU
yield / sleep查看:
vmstat 1
cat /proc/interrupts
BLOCKEDjstack <pid> | grep -A 20 BLOCKED
jstack <pid> | grep -i deadlock
查看:
jstat -gcutil <pid> 1000
建议:
iostat -x 1
dmesg | tail
WAITING 等响应netstat -anp | grep java
ss -tanp
ulimit -n
cat /proc/<pid>/limits
修改:
/etc/security/limits.conf
ulimit -u
free -h
swapon --show
建议:
vm.swappiness=10
java -version
numactl --hardware
top → 看 CPU / 内存jstack → 看线程状态jstat -gc → 看 GCiostat / netstat → 看 IOulimit → 看系统限制如果方便,告诉我:
jstack 或 top 截图我可以直接帮你判断是哪一类卡顿。