Linux:这啥命令?这台服务器我说了算-内存与性能——“CPU 没摸鱼,服务器怎么还是卡成 PPT?”

举报
yd_240046519 发表于 2026/11/06 10:19:43 2026/11/06
【摘要】 第十一章:内存与性能——“CPU 没摸鱼,服务器怎么还是卡成 PPT?”服务器卡顿时,有人第一反应是:“CPU 不够,赶紧升级!”先别急着给服务器氪金。卡顿不只和 CPU 有关:内存吃紧、磁盘读写慢、进程堵塞,都可能让机器原地罚站。这一章学会用数据找“真凶”。实验环境:Ubuntu / Debian,部分工具需要另行安装。 1. 先看全局:uptimeuptimenprocuptime 显...

第十一章:内存与性能——“CPU 没摸鱼,服务器怎么还是卡成 PPT?”

服务器卡顿时,有人第一反应是:“CPU 不够,赶紧升级!”

先别急着给服务器氪金。卡顿不只和 CPU 有关:内存吃紧、磁盘读写慢、进程堵塞,都可能让机器原地罚站。这一章学会用数据找“真凶”。

实验环境:Ubuntu / Debian,部分工具需要另行安装。

1. 先看全局:uptime

uptime
nproc

uptime 显示运行时间、在线用户数及过去 1、5、15 分钟的平均负载(load average)。nproc 显示当前可用的逻辑 CPU 数量。

比如有 4 个逻辑 CPU,负载长期在 8 左右,说明任务可能在排队;但高负载不一定等于 CPU 忙,等待磁盘 I/O 的任务也可能抬高负载。

2. CPU 谁吃得最多?

top

在 top 中按 P 按 CPU 占用排序、按 M 按内存排序,按 q 退出。

想快速抓一张“排行榜”:

ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head

注意 %CPU 是进程 CPU 使用情况,多线程程序可能超过 100%,别以为显示器坏了。

如果某个进程特别可疑,先看清它是谁:

ps -fp 1234

把 1234 换成实际 PID。不要因为它排第一就直接 kill -9;有可能它正在干正经活。

3. 内存:free 不多,未必真缺

free -h

重点看:

  • total:总内存
  • used:已使用内存
  • buff/cache:缓存等占用
  • available:估计还能提供给新程序的内存
  • Swap:交换空间

Linux 喜欢拿空闲内存做缓存,提升读取效率。所以 free 很小不一定有事,要结合 available、Swap 和系统是否卡顿判断。

找最占内存的进程:

ps -eo pid,comm,rss,%mem --sort=-rss | head

rss 大致表示常驻物理内存,单位通常是 KiB;它不等于进程独占的全部内存。

4. Swap 是“救生圈”,不是外挂内存

内存紧张时,系统可能把部分页面换到磁盘。交换空间能缓冲压力,但频繁换入换出会明显拖慢响应。

查看:

swapon --show
vmstat 1 5

vmstat 每秒采样一次,共输出 5 组(首行一般是开机以来的平均值)。重点观察:

字段 含义
r 等待 CPU 运行的任务数
si / so 每秒换入 / 换出量
wa CPU 等待 I/O 的时间比例

持续出现明显 si / so,并伴随响应变慢,才更像是真正的内存压力。有 Swap 占用不代表机器马上要爆炸。

5. CPU 没满,为什么还是慢?

也许 CPU 正在等磁盘:“你倒是把数据送来啊!”

先观察 vmstat 的 wa,再按需安装:

sudo apt update
sudo apt install sysstat

查看磁盘 I/O:

iostat -xz 1 3

关注设备的 await(I/O 平均等待时间)和 %util(设备忙碌程度)。但指标要结合磁盘类型和业务负载判断,不能仅凭某一列就宣布“硬盘已阵亡”。

如果磁盘空间已经满了,先回顾第十章的 df -h、du 排查。

6. 程序突然消失?留意 OOM

内存压力过大时,Linux 可能触发 OOM(Out Of Memory) 处理机制,结束某些进程。

检查本次启动的内核日志:

sudo journalctl -k -b | grep -Ei 'out of memory|oom|killed process'

看到类似 Killed process,再结合时间、进程名和内存数据核实。

日志为空不等于绝对没有 OOM:日志可能轮转、丢失,容器也可能受独立的内存限制。

7. 实战:三分钟性能体检

无需制造高负载,直接给当前机器做一次健康检查:

#!/usr/bin/env bash

echo '=== CPU 与负载 ==='
uptime
nproc

echo '=== 内存 ==='
free -h

echo '=== CPU 占用前五 ==='
ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head -n 6

echo '=== 内存占用前五 ==='
ps -eo pid,comm,rss,%mem --sort=-rss | head -n 6

echo '=== 系统采样 ==='
vmstat 1 3

保存为 perf_check.sh,运行:

bash perf_check.sh | tee perf_report.txt

tee 会一边显示结果,一边保存报告。遇到卡顿时再跑一次,与平时的记录比较,比凭感觉猜靠谱得多。

8. 排障口诀

  1. 先看负载:uptime,对照 nproc。
  2. 再看进程:top / ps,找到资源大户。
  3. 判断内存压力:free -h,关注 available。
  4. 查交换与等待:vmstat 1 5。
  5. 怀疑磁盘:iostat -xz 1 3。
  6. 进程莫名退出:检查 OOM 日志。

**别先重启,先留证据。**重启可能暂时治好“卡成 PPT”,却顺手销毁了现场。

本章挑战

在机器正常和感觉卡顿时各保存一份巡检报告,比较负载、available 内存、si/so 和 wa。试着回答:到底是 CPU 忙、内存紧,还是磁盘在拖后腿?

下一章预告:《第十二章:日志与故障追踪——“程序不说话,日志替它招供!”》

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。