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

相关推荐
小周技术驿站24 分钟前
Linux 权限管理细节详解
linux·运维·服务器·ubuntu·centos
cen__y1 小时前
Linux04(重定向)
linux·服务器·c语言
senijusene1 小时前
I2C 总线框架下LM75A 温度传感器 Linux驱动开发:
linux·运维·驱动开发
专注VB编程开发20年1 小时前
工控成套控制柜厂家 / 自动化小工厂 对外市场价
运维·自动化·工控·上位机开发
microxiaoxiao1 小时前
Aeroshell:2026 年,支持AI的SSH 终端
运维·人工智能·ssh
大腕先生1 小时前
通用分页超详细介绍(附带源代码解析&页面展示效果)
xml·java·linux·服务器·开发语言·前端·idea
feng14561 小时前
稳定性-风险文化建设和风险意识培养
运维·人工智能
红茶要加冰2 小时前
如何安装ubuntu-24.04-live-server-amd64系统
linux·运维·ubuntu
feng14562 小时前
稳定性-资金安全和资损防控
运维·网络·安全
cen__y2 小时前
Linux05(管道)
linux·运维·服务器·c语言·开发语言·文件流