Linux:这啥命令?这台服务器我说了算-内存与性能——“CPU 没摸鱼,服务器怎么还是卡成 PPT?”
第十一章:内存与性能——“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. 排障口诀
- 先看负载:
uptime,对照nproc。 - 再看进程:
top/ps,找到资源大户。 - 判断内存压力:
free -h,关注available。 - 查交换与等待:
vmstat 1 5。 - 怀疑磁盘:
iostat -xz 1 3。 - 进程莫名退出:检查 OOM 日志。
**别先重启,先留证据。**重启可能暂时治好“卡成 PPT”,却顺手销毁了现场。
本章挑战
在机器正常和感觉卡顿时各保存一份巡检报告,比较负载、available 内存、si/so 和 wa。试着回答:到底是 CPU 忙、内存紧,还是磁盘在拖后腿?
下一章预告:《第十二章:日志与故障追踪——“程序不说话,日志替它招供!”》
- 点赞
- 收藏
- 关注作者
评论(0)