首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >服务器CPU占用100%问题排查全流程:从现象到根治的深度实践

服务器CPU占用100%问题排查全流程:从现象到根治的深度实践

原创
作者头像
小库主机
发布2025-07-01 10:35:18
发布2025-07-01 10:35:18
7510
举报
文章被收录于专栏:RAKsmartRAKsmart

一、现象描述:CPU过载的"症状"与"病因"

当服务器出现CPU使用率持续100%时,表面现象是系统响应迟缓、服务超时增加,但背后可能隐藏着多种致命病因:

服务器CPU占用100%问题排查全流程
服务器CPU占用100%问题排查全流程

急性症状:死循环代码、内存泄漏引发的频繁GC、正则表达式回溯炸弹

慢性病变:不合理线程池配置、未优化的数据库查询、第三方API调用超时堆积

外部感染:DDoS攻击流量、加密货币挖矿木马、爬虫滥用

典型场景还原:

某电商系统在促销期间突发CPU告警,通过top命令发现Java进程PID12345占用980%CPU(逻辑核心数*100%)。进一步观察loadaverage高达60,远超物理核心数16,表明系统已处于严重过载状态。

二、诊断步骤:快速定位问题根源

1.使用top/htop定位异常进程

运行top命令,观察:

CPU占用最高的进程(按Shift+P按CPU排序)。

进程状态:D(不可中断睡眠,可能是IO阻塞)、R(运行中)、Z(僵尸进程)。

用户态vs内核态:%us高可能是应用代码问题,%sy高可能是系统调用频繁。

示例输出分析:

代码语言:txt
复制
PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND  
1234 java      20   0   12.3g   4.2g   1.1g R  98.7 21.3  10:20.45 java  
5678 nginx     20   0   20000   8000   3000 S  30.2  0.4   0:05.21 nginx  

此处java进程占用了98.7%CPU,可能是代码死循环或GC频繁。

2.分析线程堆栈(strace/pstack)

若进程是Java/Python等高级语言程序,需进一步检查线程:

Java:用jstack-l>thread_dump.log导出线程栈,查找RUNNABLE状态的线程。

C/C++:用pstack或gdb-p查看调用栈。

系统调用追踪:strace-p-T-f-ostrace.log,观察是否卡在read()/write()等系统调用。

常见问题:

线程死锁(如Java中多个线程互相持有锁)。

无限循环(如递归未终止条件)。

3.日志关键词检索

系统日志:journalctl-xe--since"1hourago"|grep-ierror。

应用日志:检查/var/log/nginx/error.log或应用自身的日志文件,搜索OOM、deadlock、Timeout等关键词。

三、解决方案:针对性优化与长期防护

1.代码优化案例

案例1:GC频繁导致CPU飙升

现象:Java进程的%CPU高,jstat-gcutil显示FGC(FullGC次数)激增。

解决:调整JVM参数(如-Xmx增加堆内存,改用G1垃圾回收器)。

案例2:SQL查询未走索引

现象:MySQL进程CPU高,slow_query_log中发现全表扫描。

解决:添加索引或重写SQL。

2.配置调整

限制资源使用:

使用cgroups限制进程CPU配额(如systemd服务的CPUQuota=50%)。

调整Nginx的worker_processes和worker_connections避免过度并发。

内核参数优化:

修改/etc/sysctl.conf,如net.core.somaxconn提高TCP连接队列。

3.长期监控策略

指标可视化:

Prometheus+Grafana监控CPU/内存/IO,设置智能告警。

自动化排查:

编写脚本定期采集top、vmstat数据,存入Elasticsearch便于回溯。

压测预防:

用wrk或JMeter模拟高并发,提前发现性能瓶颈。

四、总结

CPU100%问题本质是资源竞争或程序缺陷,需结合监控、命令工具、日志三步定位。短期可通过重启或限制资源恢复服务,长期需优化代码与架构。建议建立基线指标(如正常情况CPU<70%),并在CI/CD流程中加入性能测试环节。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档