服务器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 "^$"

相关推荐
阿里云大数据AI技术13 小时前
阿里云 EMR AI 助手正式发布:从问答工具到全栈智能运维助手
运维·人工智能
你好潘先生19 小时前
别再记命令了,用 yeero do 说句人话就能跑脚本,而且不烧 token
服务器·python·命令行
SkyWalking中文站1 天前
认识 Horizon UI · 6/17:Trace 探索器
运维·监控·自动化运维
程序员老赵2 天前
服务器文件不想 SFTP 上传?Docker 跑个 File Browser,浏览器就能管理
服务器·docker·开源
火车叼位2 天前
写给初级开发者:SSL、SSH、HTTPS 与证书体系全解析
运维
vivo互联网技术2 天前
从 10 分钟到 1 秒:ES 深度分页任意跳页的三轮优化实战
服务器·数据库·redis·elasticsearch·深度分页
小猿姐2 天前
唯品会大规模数据库云原生实践:基于 KubeBlocks 管理数千实例的统一运维之路
运维·elasticsearch·云原生
SkyWalking中文站3 天前
认识 Horizon UI · 5/17:3D 基础设施地图
运维·监控·自动化运维
SkyWalking中文站3 天前
认识 Horizon UI · 1/17:SkyWalking 新一代可观测性控制台
运维·前端·监控