服务器CPU过高问题排查思路

  1. 分析堆 dump,找出内存泄漏对象
  1. 优化代码,减少对象创建
  1. 调整 JVM 参数,优化 GC

    1. 查看 RUNNABLE 线程的详细信息

    echo "=== PID 16114 RUNNABLE 线程详情 ==="
    jstack 16114 | grep -B 5 -A 15 "RUNNABLE" | head -150

    2. 查看线程名称统计

    echo -e "\n=== 线程名称统计 ==="
    jstack 16114 | grep "^".*"" | sort | uniq -c | sort -rn | head -20

    3. 持续监控 GC(运行10次,每2秒一次)

    echo -e "\n=== GC 持续监控(10次采样)==="
    jstat -gcutil 16114 2000 10

    4. 查看 JVM 启动参数

    echo -e "\n=== JVM 启动参数 ==="
    ps -p 16114 -o args

关于 CPU 告警的可能原因

基于当前分析,CPU 告警可能由以下原因引起:

  1. 历史 GC 峰值:之前的 1,088 次 Full GC(总耗时约 99 分钟)可能导致 CPU 告警
  1. 瞬时流量峰值:大量并发请求导致 CPU 短暂升高
  1. 监控阈值设置:监控系统的 CPU 阈值可能设置过低
  1. 其他进程:可能是其他进程(如 PID 13551)的瞬时峰值

    1. 查看完整的 JVM 参数

    echo "=== JVM 参数 ==="
    jinfo -flags 16114 2>/dev/null || ps -p 16114 -ww -o args

    2. 持续监控 CPU 使用(1分钟)

    echo -e "\n=== CPU 持续监控(30次采样,每2秒)==="
    pidstat -p 16114,13551 2 30

    3. 查看系统负载历史(如果有)

    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 "^$"

相关推荐
2601_9492210319 分钟前
Splashtop赋能企业级远程办公全场景安全连接成选型优选
运维·人工智能·安全
七度黑光25 分钟前
用 openclaw 给故障复盘打分:质量审核自动化实践
运维·服务器·前端·数据库·自动化
xuefeiniao1 小时前
docker.desktop无法启动,导出镜像后
服务器·docker
last demo2 小时前
mysql
运维·数据库·mysql·oracle
灰阳阳2 小时前
Dockerfile实践-构建Nginx镜像
运维·nginx·docker·dockerfile
evo-master3 小时前
网络故障排除方法
linux·服务器·网络
Johnstons3 小时前
网络流量监控工具怎么选
运维·网络·网络故障排除·网络流量分析·网络性能监控
爱学习的小囧4 小时前
VMware Horizon 8 智能卡认证信任库配置攻略:新增 Root CA 导入指南
服务器·esxi·vmware·horizon
信创DevOps先锋5 小时前
中国DevOps工具链选型新趋势:合规、协同与生态融合的平衡之道
运维·gitee·devops
Magic--6 小时前
深入解析管道:最基础的进程间通信(IPC)实现
java·服务器·unix