首页 帮助中心 香港云服务器 香港cn2云服务器CPU突然100怎么办?top/htop/perf排查三步法
香港cn2云服务器CPU突然100怎么办?top/htop/perf排查三步法
时间 : 2026-09-29 11:04:42
编辑 : 华纳云
阅读量 : 28

  香港CN2云服务器突然CPU跑满,SSH敲命令卡顿,网站响应变慢甚至直接打不开。遇到这种情况,很多人第一反应是“被攻击了”或者“服务器太差”,但实际原因可能五花八门。不管原因是什么,盲目重启不是好习惯。重启确实能让CPU暂时降下来,但问题根源没找到,过不了多久还会复发。正确的做法是用系统自带的工具,按“整体定位 → 进程锁定 → 根因深挖”三步走,找到到底是谁在吃CPU,然后对症下药。

  第一步:用top看全局,判断“谁在忙”

  top是Linux自带的最基础的性能监控工具,不需要额外安装,登录服务器就能用。

top

  进入top界面后,先看顶部几行。load average(平均负载)是第一个要看的指标。它显示的是过去1分钟、5分钟、15分钟的平均负载值。判断标准很简单:如果负载值持续高于CPU核心数,说明系统已经饱和。用nproc可以查看核心数。

  然后看CPU使用率的分布。按数字键1可以展开显示每个核心的使用率。重点看几个字段:

  • %us(用户态):应用程序消耗的CPU。如果这个值很高,说明是业务程序在吃CPU。
  • %sy(内核态):内核消耗的CPU。如果超过20%,可能是系统调用或驱动问题。
  • %wa(IO等待):CPU等待磁盘IO的时间。如果这个值高,瓶颈可能在磁盘而不是CPU本身。
  • %st(被偷走的时间):香港云服务器特别要关注这个指标。它表示宿主机把你的CPU时间片分给了其他虚拟机。如果%st持续高于5%,说明宿主机超售严重,你的“4核”可能只是名义上的4核。

  在top界面里,按P键可以按CPU使用率排序,占用最高的进程会自动排到最前面。这就是你要找的“嫌疑人”。

  如果进程列表太长,按i键可以隐藏空闲进程,只显示正在消耗CPU的进程。按c键可以显示进程的完整命令行,对于判断进程用途很有帮助。

  香港CN2 VPS的特别提示:如果top里看到的%st很高,但自己的进程CPU占用并不高,那问题不在你这边。香港机房资源成本高,超售是常见现象。这种情况联系服务商比在服务器里折腾更实际。

  第二步:用htop锁定进程,看清“谁在吃CPU”

  top看个大概可以,但它的交互体验确实一般。htop是top的增强版,界面更友好,操作也更直观。

  如果系统没装htop,先安装:

# Ubuntu/Debian
sudo apt install htop -y

# CentOS/Rocky
sudo yum install htop -y

  运行:

htop

  htop的界面比top清晰很多。顶部有彩色的CPU和内存使用条,下面列出所有进程。按F6键可以打开排序选项,选择PERCENT_CPU,进程就会按CPU占用从高到低排列。

  找到占用最高的进程后,重点看几样东西:

  进程名(COMMAND)。正常的业务进程应该是你认识的——nginx、php-fpm、mysql、node、java这些。如果看到一个陌生的名字,比如随机字符串、或者伪装成系统进程但名字拼写有问题的(比如systemd-upgrade这种),就要高度警惕。

  运行用户(USER)。如果www-data或nginx用户下有个进程CPU跑满,可能是Web应用的问题。如果root下有个你不认识的进程在跑,那问题更严重。

  完整命令行。按F5进入树形视图,可以看到父子进程关系。有些恶意进程会伪装成子进程,树形视图能帮你理清谁启动了谁。

  一个实用的排查技巧:在htop里选中可疑进程,按F9可以直接终止它。但不要急着杀——先记下它的PID和完整命令行,杀掉之后用lsof -p PID查看这个进程打开了哪些文件,用strings /proc/PID/cmdline看它的启动参数,这些信息对判断它是不是恶意程序很有帮助。

  第三步:用perf深挖根因,搞清楚“为什么”

  前两步找到了“谁在吃CPU”,第三步要搞清楚“为什么”。是代码死循环?是系统调用太频繁?还是锁竞争?

  perf是Linux内核自带的性能分析工具,能深入到函数级别告诉你CPU时间花在哪了。需要root权限运行。

sudo perf top

  perf top的界面会实时显示当前系统里最消耗CPU的函数。输出里每一行代表一个函数,Overhead列是它占用的CPU时间百分比,Symbol列是函数名。

  怎么读perf top的输出:

  如果看到大量时间花在业务代码的函数名上(比如parse_request、process_order),说明是应用逻辑的问题。可能是某个循环写得效率太低,或者处理的数据量突然增大。

  如果看到大量时间花在内核函数上([k]开头的符号),比如do_syscall_64、copy_user_enhanced_fast_string、_raw_spin_lock,说明问题在系统层面。可能是频繁的系统调用、锁竞争、或者内存拷贝开销太大。

  如果看到pthread_mutex_lock或类似的锁函数占比很高,说明程序里有严重的锁竞争——多个线程在抢同一把锁,大量CPU时间浪费在等待上。

  一个特别值得警惕的信号:如果perf top里出现xmr、mine、cryptonight这类关键词,基本可以确认是挖/矿程序。这类程序的特征是大量时间花在特定的哈希计算函数上。

  perf top的缺点是不能看历史数据,只能看实时状态。如果CPU是间歇性飙升,可以用perf record -g采集一段时间的数据,然后用perf report分析。对于Java应用,还需要配合perf-map-agent把JIT编译后的地址映射回源码符号。

  排查后的处理方向

  根据三步排查的结果,处理方式不同:

  如果是自己的业务进程占CPU,且perf显示热点在你的代码函数上,说明需要优化代码或升级配置。香港VPS的CPU性能受超售影响,如果%st也高,升级配置可能效果有限,优化代码才是根本。

  如果是陌生进程占CPU,尤其是root用户下的、名字可疑的、或者perf显示在做哈希计算的,大概率是被入侵了。处理步骤:先记录PID和命令行→用lsof -p PID查看打开的文件→检查/etc/cron*和/var/spool/cron有没有异常计划任务→检查/tmp、/dev/shm有没有可疑文件。确认是恶意程序后,杀掉进程、删除文件、检查authorized_keys有没有被加公钥、修改所有密码。

  如果是%st高但自己的进程正常,那就是宿主机超售问题。香港低价VPS超售是常态,这种情况自己改不了,要么忍,要么换服务商。

  如果是%wa高,问题在磁盘不在CPU。用iostat -x 1看磁盘的%util和await,如果磁盘饱和了,优化IO比折腾CPU更有效。

相关内容
客服咨询
7*24小时技术支持
技术支持
渠道支持