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

相关推荐
code monkey.1 分钟前
【Linux之旅】HTTP 协议解析:从请求格式到构建 Web 服务器
linux·服务器·网络·http
LoserChaser5 分钟前
Flask 文件上传服务器 - 知识点总结
服务器·python·flask
tiannian12206 分钟前
资产管理从手工到智能:三种技术路径的优劣与适用场景
运维·rfid·资产管理系统
_codemonster11 分钟前
传统模式 vs DevOps 模式
运维·devops
難釋懷17 分钟前
Nginx对上游服务器使用keepalive
服务器·nginx·github
vortex519 分钟前
Linux 传统设计哲学:通过调用名区分行为的艺术
linux·运维·网络
Gong-Yu29 分钟前
MySQL数据库运维——性能优化进阶2️⃣
运维·数据库·mysql·性能优化
深圳恒讯30 分钟前
非洲服务器延迟高吗?实测数据与场景化解读
运维·服务器·前端
志栋智能30 分钟前
超自动化安全的实施路径:从单点场景到体系化建设
运维·网络·安全·自动化
嵌入式-老费30 分钟前
esp32开发与应用(esp32-s3的usb转串口功能)
linux·运维·服务器