TOP云提供高性价比云服务器租用,有中国内地/港澳台、海外等全球各地节点,TOP云国内云服务器只要有域名备案号就能直接用,无须重复备案;港澳台及海外云服务器不用备案,购买之后直接使用,省时省力省心。价格实惠,续费同价,2核2G5M仅需27元每月,8核8G50M仅需66元每月,更多配置套餐请进入下面网址了解:
TOP云总站云服务器:https://topyun.vip/server/buy.html
TOP云C站云服务器:https://c.topyun.vip/cart
当云服务器的 CPU 使用率达到 100%(即“跑满”)时,会导致系统响应变慢、服务不可用、应用程序卡顿等问题。要解决这一问题,需要快速定位导致 CPU 占用高的原因,并采取相应的措施进行优化或修复。以下是系统化的排查与解决方案。
一、初步确认问题现象
在开始排查之前,先确认以下信息:
CPU 使用率是否真的达到 100%:
是短暂峰值还是持续高负载?
是单个核心跑满还是所有核心跑满?
是否影响了服务和应用:
网站或应用程序是否无法访问?
是否有报错或超时?
是否是突发流量或业务高峰导致:
是否近期有流量激增(如促销活动、爬虫访问等)?
二、检查 CPU 使用情况
1️⃣ 使用 top 命令查看实时 CPU 使用情况
在 Linux 系统中,top 是最常用的实时系统监控工具之一。
运行以下命令:
top
关注以下关键列:
PID:进程 ID;
USER:运行该进程的用户;
%CPU:该进程占用的 CPU 百分比;
COMMAND:进程名称或命令。
按下 Shift + P 可以按 CPU 使用率对进程排序,快速找到占用 CPU 最高的进程。
2️⃣ 使用 htop 命令(更直观)
如果系统安装了 htop(比 top 更友好的工具),可以使用它来查看 CPU 使用情况:
安装 htop(如未安装):
sudo apt install htop # Ubuntu/Debian
sudo yum install htop # CentOS/RHEL运行 htop:
htop
htop 提供了更直观的界面,支持颜色高亮、鼠标操作和进程排序。
3️⃣ 使用 mpstat 查看每个 CPU 核心的使用率
mpstat 是 sysstat 工具包中的一个命令,可以查看每个 CPU 核心的详细使用率。
安装 sysstat(如未安装):
sudo apt install sysstat # Ubuntu/Debian
sudo yum install sysstat # CentOS/RHEL运行 mpstat:
mpstat -P ALL 1
输出示例:
%usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
%usr:用户态进程占用的 CPU;
%sys:内核态进程占用的 CPU;
%iowait:等待 I/O 的 CPU 时间;
%idle:空闲 CPU 时间。
如果 %idle 接近 0,说明 CPU 几乎被占满。
4️⃣ 使用 vmstat 查看系统整体状态
vmstat 可以查看系统的 CPU、内存、I/O 等整体使用情况。
运行以下命令:
vmstat 1
输出示例:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 5 0 0 123456 78901 234567 0 0 12 34 56 78 90 5 5 0 0
r:运行队列中的进程数(如果该值较高,说明 CPU 负载高);
us:用户态进程占用的 CPU;
sy:内核态进程占用的 CPU;
id:空闲 CPU 时间。
三、定位高 CPU 占用的进程
通过上述工具,可以找到占用 CPU 较高的进程。接下来需要进一步分析这些进程的具体行为。
1️⃣ 查看进程的详细信息
使用 ps 命令查看进程的详细信息:
ps -fp <PID>
<PID> 是高 CPU 占用进程的 ID(从 top 或 htop 中获取)。
示例:
ps -fp 1234
输出示例:
UID PID PPID C STIME TTY TIME CMD root 1234 1 99 10:00 ? 10:30:00 /usr/bin/some_process
C:CPU 使用率;
CMD:进程的命令名称。
2️⃣ 查看进程的线程情况
某些进程可能有多个线程,其中某个线程占用了大量 CPU。可以使用 top 或 htop 查看线程级别的 CPU 使用情况:
在 top 中,按下 H 键可以切换到线程视图;
在 htop 中,按下 F2 > Display options > 启用 Show custom thread names。
也可以使用 ps 命令查看进程的线程:
ps -T -p <PID>
示例:
ps -T -p 1234
输出示例:
PID SPID TTY TIME CMD 1234 1234 ? 00:00:01 some_process 1234 1235 ? 00:10:30 some_process
SPID 是线程 ID;
TIME 是线程占用的 CPU 时间。
3️⃣ 使用 strace 跟踪进程的系统调用
如果高 CPU 占用的进程是一个未知的或可疑的进程,可以使用 strace 跟踪其系统调用,分析其行为:
运行以下命令:
sudo strace -p <PID>
如果进程调用了大量的系统调用(如频繁的文件读写、网络请求等),可能会进一步确认问题原因。
⚠️ 注意:strace 会对进程性能产生一定影响,建议在排查时短期使用。
4️⃣ 使用 perf 分析性能瓶颈
perf 是 Linux 内核提供的性能分析工具,可以用来分析高 CPU 占用进程的具体函数调用。
安装 perf(如未安装):
sudo apt install linux-tools-common linux-tools-generic # Ubuntu/Debian
sudo yum install perf # CentOS/RHEL运行 perf 分析进程:
sudo perf top -p <PID>
或生成火焰图(更直观):
sudo perf record -p <PID> -g
sudo perf script | FlameGraph/stackcollapse-perf.pl | FlameGraph/flamegraph.pl > flamegraph.svg
四、常见高 CPU 占用原因及解决方案
根据排查结果,高 CPU 占用可能由以下原因引起:
1️⃣ 应用程序代码问题
可能原因:
应用程序存在死循环、递归调用、计算密集型任务等;
代码逻辑错误导致 CPU 资源被大量占用。
解决方案:
检查应用程序日志,定位问题代码;
优化代码逻辑,避免死循环或高复杂度算法;
如果是 Web 应用,检查是否有异常请求(如爬虫、恶意攻击)。
2️⃣ 数据库查询问题
可能原因:
数据库查询未优化,导致 CPU 资源被大量消耗;
慢查询、全表扫描、索引失效等问题。
解决方案:
检查数据库慢查询日志(如 MySQL 的 slow_query_log);
优化 SQL 查询,添加索引,避免全表扫描;
使用数据库性能分析工具(如 EXPLAIN 分析查询计划)。
3️⃣ 系统进程或服务异常
可能原因:
某个系统服务(如 sshd、cron、systemd 等)异常运行;
系统进程被恶意利用(如挖矿病毒)。
解决方案:
检查异常进程的来源,确认是否为系统正常进程;
使用杀毒工具(如 clamav)扫描系统是否感染病毒;
如果确认是恶意进程,立即终止并修复系统漏洞。
4️⃣ 高并发请求或流量激增
可能原因:
网站或应用程序突然面临高并发访问;
爬虫、DDoS 攻击等导致流量激增。
解决方案:
使用负载均衡(如 Nginx、HAProxy)分散流量;
使用缓存(如 Redis、Memcached)减轻后端压力;
限制恶意请求(如配置防火墙、使用 WAF)。
5️⃣ 定时任务(Cron)或脚本问题
可能原因:
定时任务(如 cron)运行了耗时的脚本;
脚本中存在死循环或错误逻辑。
解决方案:
检查 cron 任务日志(通常位于 /var/log/cron 或 /var/log/syslog);
优化脚本逻辑,避免高 CPU 操作。
五、临时缓解措施
在找到根本原因之前,可以采取以下措施临时缓解 CPU 压力:
终止高 CPU 占用的进程:
sudo kill -9 <PID>
⚠️ 注意:强制终止进程可能导致服务中断,请谨慎操作。
限制进程的 CPU 使用:
使用 cpulimit 工具限制进程的 CPU 使用率:
sudo apt install cpulimit # Ubuntu/Debian
sudo yum install cpulimit # CentOS/RHEL
sudo cpulimit -p <PID> -l 50 # 限制进程的 CPU 使用率为 50%增加服务器资源:
如果业务增长导致资源不足,可以考虑升级云服务器配置(如增加 CPU 核心数)。
六、联系云服务商技术支持
如果经过以上排查仍无法解决问题:
提供详细信息,包括:
云服务商名称;
操作系统及版本;
高 CPU 占用的进程信息;
错误日志内容;
已尝试的排查步骤;
联系云服务商的技术支持或提交工单,寻求进一步帮助。