服务器CPU占用率达到100% 通常属于异常情况,需要立即关注和处理。但具体是否“异常”还需结合以下因素综合判断:
一、可能属于正常情况的场景(短暂或特定场景)
- 业务高峰期
例如电商大促、秒杀活动、游戏开服等,短时间CPU满载可能是正常业务压力导致的。 - 计划内任务
如大数据计算、批量数据处理、编译构建、备份任务等,任务结束后应恢复正常。 - 性能测试或压测
在压力测试期间,CPU持续高负载是预期行为。 - 特定应用特性
某些科学计算、渲染、加密解密等CPU密集型应用,可能长期占用高CPU资源。
二、异常情况的典型特征(需紧急排查)
- 持续长时间满载(如超过几分钟),且无合理业务解释。
- 伴随性能问题:服务响应变慢、请求超时、卡顿、宕机等。
- 非预期进程占用:非核心进程或未知进程消耗大量CPU。
- 系统负载同步飙升:通过
top、htop等命令查看,系统负载(Load Average)远高于CPU核心数。 - 关联异常:同时出现内存飙升、磁盘I/O等待、网络拥堵等问题。
三、常见原因及排查步骤
常见原因
- 程序Bug或死循环
- 配置不当:线程池过大、超时设置不合理等。
- 资源竞争:锁竞争、数据库慢查询、缓存击穿/雪崩。
- 恶意攻击:DDoS、CC攻击、XX病毒(检查异常网络连接或进程)。
- 依赖服务故障:下游服务响应慢导致请求堆积。
快速排查步骤
- 定位进程
top -c # 查看CPU占用最高的进程 ps aux --sort=-%cpu | head -10 - 分析线程(Java应用示例)
top -H -p [PID] # 查看进程内线程占用 jstack [PID] > thread_dump.txt # Java线程转储 - 检查日志
- 应用错误日志(如Java的GC日志、错误堆栈)。
- 系统日志(
/var/log/messages、dmesg)。
- 监控关联指标
- 内存使用率、磁盘I/O、网络流量。
- 应用监控(APM工具:如SkyWalking、Arthas)。
- 病毒/入侵排查
chkconfig --list | grep 3:on # 检查自启动服务 crontab -l # 检查定时任务 netstat -antp | grep ESTABLISHED # 检查网络连接
四、处理建议
- 临时缓解
- 重启异常服务(先确保可重启)。
- 扩容或限流(云服务器可临时升级CPU)。
- 优化方向
- 代码优化:避免死循环、减少不必要的计算。
- 异步处理:将耗时操作异步化。
- 缓存优化:减少重复计算或数据库查询。
- 架构调整:引入队列削峰、负载均衡。
- 预防措施
- 设置监控告警(如CPU持续>90%超过5分钟)。
- 定期进行性能测试和压力测试。
- 完善日志和链路追踪。
总结
- 短期峰值:结合业务场景判断,可能正常。
- 长期100%:极大概率异常,需立即排查。
- 关键点:是否影响服务稳定性?是否与业务预期一致?
建议建立基线监控(如平时CPU占用率在30%~50%),当指标显著偏离基线时快速响应。
CLOUD技术笔记