博客

教程、指南和产品动态。

指南

我的服务器变慢了:如何检查 RAM、CPU 和磁盘

2 11月 2026 2 分钟阅读
分享此文章

如果您的服务器变慢了,请查看三样东西:RAM、CPU 和磁盘。连接服务器,运行三条命令:用 free -h 看内存,用 top 看处理器,用 df -h 看磁盘。哪一个占满了,哪一个就是瓶颈。如果三者看起来都正常,问题通常出在应用本身。

先看负载

平均负载是等待 CPU 或磁盘的进程的平均数量。下面输出中的前三个数字,分别是最近 1、5 和 15 分钟的平均值。请把它们与您的核心数对比:

cat /proc/loadavg

nproc

如果负载长时间高于核心数,说明服务器已经跟不上工作量。

RAM:free -h

free -h

最重要的一列是可用(available)。如果它非常小,而且 Swap 一行在不断被占满,说明 RAM 不够了。内存耗尽时,内核会终止其中一个占用内存最多的进程(OOM killer)。数据库或 Web 应用自己关闭,往往就是这个原因。可以这样检查:

sudo dmesg -T | grep -i -E "out of memory|killed process"

CPU:top

top

在打开的界面中,P 键按 CPU 使用率对进程排序,M 键按内存使用率排序。按 q 退出。在顶部的 CPU 行中,请看这几项:

  • us:用户进程所占的比例。如果很高,说明某个应用在吃 CPU。
  • wa:等待磁盘输入输出所花的时间。如果很高,问题不在 CPU,而在磁盘。
  • st:从虚拟服务器“偷走”的时间,也就是虚拟化层把 CPU 让给了别的对象的时间。如果它一直很高,问题可能不在您的服务器内部。这种情况下,请联系支持。

磁盘:df -h

df -h

df -i

第一条命令显示已用空间,第二条显示文件数量限制(inode)。磁盘完全写满时,数据库和应用无法写入,服务器会变慢或报错。找出是什么占用了空间:

sudo du -xh / --max-depth=1 2>/dev/null | sort -h | tail -n 8

如果系统日志变大了,可以用 sudo journalctl --vacuum-size=200M 缩小。如果使用 Docker,docker system df 会显示镜像和容器占用的空间,docker stats --no-stream 会显示每个容器使用多少 CPU 和内存。

症状、可能的原因和解决办法

现象可能的原因操作
页面时不时变慢,可用(available)很低,swap 已满RAM 不足关闭不需要的服务,并调小应用的内存设置(例如 PHP-FPM 的 worker 数量或数据库内存)。如果还不够,就升级服务器。
某个服务自己关闭,dmesg 输出中出现“killed process”内存耗尽,OOM killer 介入了增加 RAM 或减少内存使用。
top 中有一个进程一直占满整个核心进程卡住、插件有缺陷或陷入循环找到这个进程,然后修复或停用它背后的应用或插件。
负载很高,CPU 空闲,wa 很高在等待磁盘(大量写入或 swap)查看 vmstat 1 5 中的 si 和 so 两列。如果在使用 swap,就增加 RAM。
df -h 或 df -i 已满磁盘空间或 inode 用完了清理大文件和日志。如果总是被写满,就升级。
st 一直很高问题可能出在您的服务器之外联系支持。

在 Seturack,每台服务器的磁盘速度是有限制的:读取持续 500 MB/s 和 20,000 IOPS,写入 200 MB/s 和 8,000 IOPS。如果 iostat -x 1 5 输出中您的数值停在这些数字上,说明拖慢您的是磁盘负载。请用缓存减少工作量,或者把工作分散到不同时间。如果没有 iostat,用 sudo apt install -y sysstat 安装。

swap 什么时候有用?

Swap 用磁盘代替 RAM。它能让服务器在 OOM killer 介入之前撑过短暂的内存峰值,但速度比不上 RAM。如果 vmstat 1 5 输出中的 si 和 so 一直大于零,说明服务器在不停地写入 swap。解决办法是加 RAM,而不是加 swap。如果您没有 swap(swapon --show 没有输出),又想平滑峰值,可以添加一个 2 GB 的 swap 文件。这些命令适用于 ext4 文件系统:

sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile

sudo mkswap /swapfile && sudo swapon /swapfile

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

如果资源看起来正常

如果 RAM、CPU 和磁盘看起来都很宽裕,请在 top 中查看排在最前面的进程名称:

  • 如果排在最前面的是 php-fpm、apache2 或 nginx,问题通常出在网站本身:插件太重、缺少缓存,或者访问量突然猛增。
  • 如果排在最前面的是 mysqld 或 mariadbd,说明有慢查询。请开启数据库的慢查询日志,看看哪些查询耗时长。
  • 如果有一个您不认识的进程一直在吃 CPU,服务器可能已被入侵。请更改密码,检查已打开的会话和 sudo ss -tulpn 的输出,必要时用干净的系统重装服务器。

何时升级

顺序是:先调优,再加缓存,关掉不必要的工作。如果这之后负载仍然很高,就升级服务器。在面板中打开您服务器的配置标签页,把滑块移到新的配置并确认。付款后,服务器会自动重启一次,并以新配置恢复运行。您的 IP 地址和数据保持不变,只需为剩余天数补差价。RAM、vCore 和磁盘可以分别增加,所以只需提高不够用的那一项。升级会增大磁盘,而降配不会缩小磁盘。详情请参阅升降配文章。

如果服务器因为负载过高而完全没有响应,SSH 可能连不上。这种情况下,请从面板中打开 VNC 控制台,或者在面板中重启服务器。

评论0

暂无评论

成为第一个分享想法的人。

参与讨论

请登录或注册后发表评论。

不错过任何文章

通过电子邮件接收我们最新的教程、指南和产品资讯。

您已订阅我们的电子通讯。