售前咨询400-838-0503

Linux服务器CPU占用过高怎么办?

发布:2026-09-24 15:17更新:2026-09-24 16:32

搜索全部帮助分类的文档

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 容器、系统内核还是存储负载。

按文档操作后还是不行,把机器编号、出问题的时间点和现象截图一起提工单,能少来回一轮。

提交工单