Linux 云服务器运行网站、数据库、Docker、游戏服务或者其他程序时,可能出现 CPU 使用率突然升高,或者长时间保持较高水平的情况。
短时间 CPU 升高并不一定代表服务器异常。
程序启动、压缩文件、网站访问量增加、编译程序或者执行定时任务,都可能暂时占用较多 CPU。
如果 CPU 长时间保持高占用,就需要继续检查具体原因。
一、使用 top 查看 CPU 状态

首先执行:
top
顶部通常可以看到类似:
%Cpu(s): 20.0 us, 10.0 sy, 0.0 ni, 68.0 id, 1.0 wa
其中:
us 表示普通应用程序使用的 CPU。
sy 表示 Linux 内核使用的 CPU。
id 表示 CPU 空闲比例。
wa 表示等待磁盘 I/O 的时间。
如果 id 长时间接近 0,说明服务器 CPU 基本处于高占用状态。
不过还需要继续确认具体是哪一个程序造成的。
二、查看 CPU 占用最高的进程

可以执行:
ps aux --sort=-%cpu | head
如果需要查看更多进程信息,可以使用:
ps -eo pid,ppid,user,%cpu,%mem,cmd --sort=-%cpu | head -20
重点查看:
PID;
CPU 占用;
程序名称;
运行用户;
启动命令。
发现高 CPU 进程以后,建议先确认该进程属于什么业务,不要直接强制结束。
三、单个进程显示 100% 是什么意思?
判断单个进程 100% 是否严重,需要结合服务器 CPU 核心数量。
可以执行:
nproc
例如服务器拥有 8 个 CPU 核心,一个单线程程序显示 100%,通常表示它占满了其中一个核心,并不代表整台 8 核服务器所有 CPU 都已经达到 100%。
如果需要查看更详细的 CPU 信息,可以执行:
lscpu
因此判断 CPU 是否真正耗尽时,需要同时结合核心数量和整体 CPU 使用情况。
四、查看高 CPU 进程内部线程
假设高 CPU 进程 PID 为 12345,可以执行:
top -H -p 12345
这样可以查看该程序内部不同线程的 CPU 使用情况。
对于 Java、数据库、游戏服务器、虚拟化等多线程程序,这种方式通常比较有帮助。
五、持续观察 CPU 使用情况
如果服务器安装了 sysstat,可以执行:
pidstat 1
系统会每秒显示一次不同进程的 CPU 使用情况。
如果只需要观察指定进程,可以使用:
pidstat -p 12345 1
相比只查看一次 top,持续观察一段时间更容易判断 CPU 升高是短暂峰值还是持续异常。
六、检查 Docker 容器 CPU

如果服务器运行 Docker,可以执行:
docker stats
这里可以实时查看不同容器的 CPU、内存、网络以及磁盘 I/O 使用情况。
如果发现某个容器 CPU 长时间较高,可以执行:
docker ps
确认具体容器名称和业务。
然后查看近期日志:
docker logs --tail 100 容器名称
如果日志持续高速重复输出,可能存在程序异常、错误重试或者循环执行等情况。
七、us 很高代表什么?
如果 top 中的 us 长时间比较高,一般表示 CPU 主要被普通应用程序消耗。
常见情况包括:
网站访问量增加;
PHP、Java、Node.js 等程序异常;
数据库查询消耗较高;
压缩、解压或编译任务;
游戏服务;
视频处理;
Docker 容器中的应用程序。
这种情况首先应该找到具体占用 CPU 的进程,然后结合对应程序日志继续分析。
八、sy 很高代表什么?
如果 sy 长时间明显偏高,表示较多 CPU 时间消耗在 Linux 内核。
可以执行:
vmstat 1
持续观察系统运行情况。
常见方向包括:
大量网络数据处理;
大量系统调用;
虚拟化任务;
大量连接;
频繁的上下文切换。
如果服务器本身运行大量虚拟机、容器或者高网络流量业务,需要结合实际业务继续分析。
九、wa 很高代表什么?
如果 wa 长时间较高,通常表示 CPU 正在等待磁盘 I/O。
这种情况下 CPU 问题可能只是表面现象,实际瓶颈可能来自磁盘或者存储。
可以执行:
iostat -xz 1
如果系统没有 iostat,通常需要先安装 sysstat。
磁盘 I/O 较高时,可以继续检查数据库、大量文件读写、备份任务、Swap 使用情况以及程序日志。
十、检查 Load Average
执行:
uptime
可能看到类似:
load average: 2.10, 1.80, 1.50
三个数字分别代表最近 1 分钟、5 分钟和 15 分钟的平均系统负载。
判断 Load 是否过高,需要结合 CPU 核心数量。
相同的 Load Average,对于 1 核服务器和 16 核服务器代表的压力并不相同。
因此不要只看到 Load 数字比较大,就直接判断服务器 CPU 出现故障。
十一、CPU 不高但 Load 很高怎么办?
如果 CPU 使用率并不高,但 Load Average 长时间偏高,可以重点检查磁盘 I/O 或正在等待系统资源的进程。
首先可以通过:
top
观察 wa。
然后执行:
iostat -xz 1
如果磁盘响应时间或者利用率明显异常,就需要继续从磁盘、数据库、Swap、大量文件读写等方向检查。
十二、检查定时任务
如果 CPU 经常在每天固定时间或者固定间隔突然升高,可以检查定时任务。
查看当前用户的 Cron:
crontab -l
查看系统级定时任务:
ls -lah /etc/cron.d/
常见情况包括:
网站备份;
数据库备份;
日志压缩;
文件同步;
扫描任务;
程序定时任务。
如果 CPU 高峰出现时间比较固定,建议重点排查这一部分。
十三、网站服务器 CPU 突然升高
如果服务器主要运行网站,可以同时结合网站访问情况检查。
比较常见的原因包括:
网站访问量突然增加;
搜索引擎或其他爬虫大量访问;
接口被高频调用;
PHP 程序异常;
WordPress 插件异常;
数据库查询耗时;
缓存没有正常生效。
可以结合 Nginx 或 Apache 访问日志、PHP-FPM、MySQL 和网站程序日志一起判断。
如果只是重启服务器而没有找出真正原因,CPU 很可能还会再次升高。
十四、不要直接强制结束高 CPU 进程
发现 CPU 占用较高的进程以后,不建议第一时间执行:
kill -9 PID
因为该进程可能是数据库、Web 服务、Docker、虚拟机或者其他重要业务。
建议先确认程序身份和业务影响。
如果需要正常结束普通进程,可以先尝试:
kill PID
如果属于 systemd 管理的服务,更建议通过:
systemctl restart 服务名称
进行重启。
只有确认程序已经异常、无法正常退出,并且不会造成重要数据问题时,再根据实际情况考虑强制结束。
十五、CPU 长期不足应该怎么办?
如果已经确认 CPU 高并不是程序故障,而是正常业务产生的持续负载,可以考虑:
优化应用程序;
增加缓存;
优化数据库查询;
减少不必要的后台任务;
限制异常请求;
将部分业务拆分到其他服务器;
升级更多 CPU 核心或者更高性能的服务器配置。
扩容之前建议先确认 CPU 的实际消耗来源。
如果问题来自程序死循环或者异常任务,即使增加 CPU,也可能很快再次被占满。
十六、Linux CPU 快速排查表
| 问题现象优先检查常见方向 | ||
|---|---|---|
| CPU 突然达到 100% | top、ps |
定位高 CPU 进程 |
| 单个程序显示 100% | CPU 核心数量 | 可能只占满一个核心 |
us 很高 |
应用程序 | Web、数据库、程序计算 |
sy 很高 |
系统内核 | 网络、虚拟化、系统调用 |
wa 很高 |
磁盘 I/O | 磁盘、数据库、Swap |
| Load 高但 CPU 不高 | I/O 等待 | 存储或磁盘问题 |
| Docker CPU 高 | docker stats |
定位具体容器 |
| 固定时间 CPU 升高 | Cron | 备份或其他定时任务 |
| 重启后很快再次升高 | 应用或流量 | 需要继续寻找根本原因 |
建议按照:
查看整体 CPU → 定位高 CPU 进程 → 判断 us、sy、wa → 检查 Docker → 检查 Load 与磁盘 I/O → 查看程序日志 → 再决定优化或者升级配置
的顺序进行排查。
十七、仍然无法判断怎么办?
如果服务器 CPU 长时间保持较高占用,并且无法确定具体原因,可以通过莱卡云客户中心提交工单。
建议提供:
服务器 IP;
问题发生时间;
业务类型;
CPU 高占用是否持续出现;
top 页面截图;
高 CPU 进程名称。
如果方便,也可以提供:
ps aux --sort=-%cpu | head
如果服务器运行 Docker,还可以提供:
docker stats
请在截图或者输出中隐藏密码、Token 等敏感信息。
总结
Linux 服务器 CPU 占用过高时,不建议第一时间重启服务器或者直接结束高 CPU 进程。
首先可以通过:
top
查看服务器整体 CPU 状态,再通过:
ps aux --sort=-%cpu | head
定位具体占用 CPU 的进程。
如果服务器运行 Docker,还可以通过:
docker stats
确认具体容器的资源使用情况。
结合 us、sy、wa、Load Average、磁盘 I/O 以及程序日志进行判断,通常可以进一步确认问题来自应用程序、Docker 容器、系统内核还是存储负载。