- 分析堆 dump,找出内存泄漏对象
- 优化代码,减少对象创建
-
调整 JVM 参数,优化 GC
1. 查看 RUNNABLE 线程的详细信息
echo "=== PID 16114 RUNNABLE 线程详情 ==="
jstack 16114 | grep -B 5 -A 15 "RUNNABLE" | head -1502. 查看线程名称统计
echo -e "\n=== 线程名称统计 ==="
jstack 16114 | grep "^".*"" | sort | uniq -c | sort -rn | head -203. 持续监控 GC(运行10次,每2秒一次)
echo -e "\n=== GC 持续监控(10次采样)==="
jstat -gcutil 16114 2000 104. 查看 JVM 启动参数
echo -e "\n=== JVM 启动参数 ==="
ps -p 16114 -o args
关于 CPU 告警的可能原因
基于当前分析,CPU 告警可能由以下原因引起:
- 历史 GC 峰值:之前的 1,088 次 Full GC(总耗时约 99 分钟)可能导致 CPU 告警
- 瞬时流量峰值:大量并发请求导致 CPU 短暂升高
- 监控阈值设置:监控系统的 CPU 阈值可能设置过低
-
其他进程:可能是其他进程(如 PID 13551)的瞬时峰值
1. 查看完整的 JVM 参数
echo "=== JVM 参数 ==="
jinfo -flags 16114 2>/dev/null || ps -p 16114 -ww -o args2. 持续监控 CPU 使用(1分钟)
echo -e "\n=== CPU 持续监控(30次采样,每2秒)==="
pidstat -p 16114,13551 2 303. 查看系统负载历史(如果有)
echo -e "\n=== 系统负载历史(最近24小时)==="
sar -q -s $(date -d '24 hours ago' +%H:%M:%S) 2>/dev/null | tail -20 || echo "需要安装 sysstat"4. 查看是否有定时任务
echo -e "\n=== 定时任务 ==="
crontab -l 2>/dev/null || echo "无用户 crontab"
cat /etc/crontab 2>/dev/null | grep -v "^#" | grep -v "^$"