Java 线程死锁
接口长时间无响应,线程池耗尽,CPU 可能不高;日志没有明显异常,重启后暂时恢复。jstack 能看到 Found one Java-level deadlock。
jcmd <PID> Thread.print > threads.txt
grep -A30 -i 'deadlock' threads.txt
jstack -l <PID> | grep -A20 'BLOCKED'
查看线程数和状态:
jcmd <PID> Thread.print | grep -c 'java.lang.Thread.State'
jcmd <PID> Thread.print | grep 'java.lang.Thread.State' | sort | uniq -c
tryLock 带超时,失败时释放并重试。jstack 和 APM 定位阻塞链,修复后压测验证。jstack — 线程栈和死锁检测jcmd Thread.print — 线程 dumpasync-profiler — 锁竞争采样jvm-gc-overhead — 排除 GC 停顿