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

相关推荐
J2虾虾16 小时前
Docker启动超时,吓得我一身汗
运维·docker·容器
一生只为赢16 小时前
通俗易懂:ARM指令的寻址方式(三)
运维·arm开发·数据结构·嵌入式实时数据库
运维行者_16 小时前
2026 技术升级,OpManager 新增 AI 网络拓扑与带宽预测功能
运维·网络·数据库·人工智能·安全·web安全·自动化
代码的奴隶(艾伦·耶格尔)17 小时前
Nginx
java·服务器·nginx
头发还没掉光光17 小时前
HTTP协议从基础到实战全解析
linux·服务器·网络·c++·网络协议·http
液态不合群17 小时前
Nginx多服务静态资源路径冲突解决方案
运维·nginx
Getgit17 小时前
Linux 下查看 DNS 配置信息的常用命令详解
linux·运维·服务器·面试·maven
数通工程师18 小时前
企业级硬件防火墙基础配置实战:从初始化到规则上线全流程
运维·网络·网络协议·tcp/ip·华为
岁岁种桃花儿18 小时前
详解kubectl get replicaset命令及与kubectl get pods的核心区别
运维·nginx·容器·kubernetes·k8s
捷智算云服务18 小时前
告别运维割裂!捷智算GPU维修中心重新定义“全栈式”维修新标准
运维·服务器·性能优化