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 压力:

  1. 终止高 CPU 占用的进程

    sudo kill -9 <PID>

    ⚠️ 注意:强制终止进程可能导致服务中断,请谨慎操作。

  2. 限制进程的 CPU 使用

    • 使用 cpulimit 工具限制进程的 CPU 使用率:

      sudo apt install cpulimit        # Ubuntu/Debian
      sudo yum install cpulimit        # CentOS/RHEL
      sudo cpulimit -p <PID> -l 50     # 限制进程的 CPU 使用率为 50%
  3. 增加服务器资源

    • 如果业务增长导致资源不足,可以考虑升级云服务器配置(如增加 CPU 核心数)。


六、联系云服务商技术支持

如果经过以上排查仍无法解决问题:

  • 提供详细信息,包括:

    • 云服务商名称;

    • 操作系统及版本;

    • 高 CPU 占用的进程信息;

    • 错误日志内容;

    • 已尝试的排查步骤;

  • 联系云服务商的技术支持或提交工单,寻求进一步帮助。



不容错过
Powered By TOPYUN 云产品资讯