2022-04-03 06:01:32
排查服务器CPU 100%的问题需结合服务器类型(数据库/应用服务器)针对性分析。以下是具体排查和解决思路:
一、数据库服务器常见原因监控对比
使用云厂商监控(如阿里云、腾讯云)查看当前QPS/TPS,对比历史数据确认是否异常。
慢查询分析
检查慢查询日志,定位执行时间过长或频繁调用的SQL。

回滚最近上线的代码(快速恢复)。
对非核心功能降级处理。
定位高CPU进程
top
定位高CPU线程
top -H -p <PID>转换线程ID为16进制
printf "%xn" <TID>获取线程堆栈
jstack <PID> | grep <TID> -A50 >> thread_log.txt
计算密集型任务
优化算法或减少计算量(如改用更高效的数据结构)。
硬件扩容(如增加CPU核心或分布式处理)。
死循环问题
添加可中断标志位(如volatile boolean控制循环退出)。
限制最大执行次数并添加日志告警。
// 示例:可中断标志位private volatile boolean running = true;public void stopLoop() { running = false; }// 示例:限制最大执行次数final int MAX_ITERATIONS = 1000;while (count++ < MAX_ITERATIONS && !isTaskDone()) { ... }频繁GC问题
调整JVM堆内存参数(如-Xms、-Xmx)。
使用工具(如jmap、jstat)分析内存泄漏。
锁竞争问题
缩小锁粒度(如分段锁)。
使用tryLock()避免长时间阻塞。
// 示例:超时锁获取if (lock.tryLock(100, TimeUnit.MILLISECONDS)) { try { ... } finally { lock.unlock(); }} else { ... }死锁问题
统一加锁顺序(如按对象ID排序加锁)。
使用无锁数据结构(如ConcurrentHashMap)。
定期压测,提前发现性能瓶颈。
完善监控告警(如CPU阈值、慢查询日志)。
通过以上步骤,可系统化排查并解决服务器CPU 100%问题。