最近是不是发现手里的 VPS 突然变得奇卡无比,甚至连 SSH 都连不上了?登上后台一看,好家伙,CPU 和内存直接爆表,全是红色的警告。这种情况谁遇到不头大?

其实,服务器资源莫名跑满是个很常见的问题,但别慌,咱们只要按步骤排查,大部分情况都能快速找到元凶并解决。今天就分享一套我自己常用的排查套路。

第一步:安装趁手的工具

如果是在只有几个 G 内存的小鸡上,千万别急着装太重的监控面板。先用最基础的命令行工具。如果你还没装 htop,赶紧装一个,它比系统自带的 top 命令直观太多了。

# Debian/Ubuntu
apt install htop -y
# CentOS
yum install htop -y

第二步:直观查看谁在“作怪”

直接输入 htop 回车,你会看到一个彩色的进度条界面。这时候关注两个点:

htop 命令界面截图,显示彩色进度条和进程列表

htop 界面示意图

  1. Load Average(负载):如果这个数字长期高于 CPU 核心数,说明压力很大。
  2. 进程列表:默认按 CPU 占用率排序。直接看列表最上面的几行,是不是有某个进程把 CPU 吃光了?同时看看 RES(内存占用)列,谁占用的内存最高。

第三步:确定问题类型

根据 htop 的显示,通常情况分两类:

1. 某个特定进程疯狂占用资源

如果是像 javapythonnode 或者某个具体的软件(比如 MySQL、WordPress 的 PHP-FPM)占用高,那大概率是业务出了问题。

  • 数据库内存泄漏:MySQL 配置不合理,缓冲区开太大。
  • 代码死循环:如果你自己在写代码,可能不小心写了死循环。
  • 流量激增:突然来了大量访问,Web 进程处理不过来。

解决思路:如果是死进程卡死,直接 kill 掉进程 ID 即可(kill -9 PID)。如果是业务软件,建议先重启服务,比如 systemctl restart mysql

2. 看不到明确的高占用进程,但系统负载巨高

这种情况最吓人,往往是因为系统中产生了大量僵尸进程或者短命进程。

这时候用 htop 可能看不准,我们可以用 ps 命令辅助统计一下进程数量:

ps -ef | wc -l

终端中执行 ps 命令统计进程数量

使用 ps 命令统计进程数

如果这个数字大得离谱(比如几千上万),那可能是有脚本在疯狂生成进程(比如写错了的 Cron 定时任务)。

第四步:分析Swap(交换分区)情况

有时候 CPU 不高,但内存满了,系统会疯狂读写 Swap,这会导致硬盘 I/O 爆炸,间接拉高 CPU 负载(kswapd0 进程)。

free -m 看一下 Swap 的使用量。如果 Swap 也在飞快增长,说明物理内存真的不够用了。

解决思路

  • 临时:清理一下系统缓存(sync && echo 3 > /proc/sys/vm/drop_caches,注意这只是临时释放文件缓存)。
  • 根本:要么加内存,要么给占用内存的大户做限制(比如给 Docker 容器限制内存)。

最后的总结

遇到爆资源,心态别崩。先看 htop 找大头,再查 ps 看数量,最后查 I/O 和 Swap。大部分时候,要么是某个 Web 服务假死,要么是自己跑的脚本失控了,实在搞不定就直接重启大法(reboot),虽然粗暴但往往最有效。

大家平时维护服务器还有什么独门绝技?欢迎在评论区交流!

标签: none

AI Skills Smart Station on Nick Launches

评论已关闭