Linux入门教程 第十五章 Linux 系统调优工具
文章目录
- 一、系统调优概述与 CPU 负载查看
- 1.使用 uptime 查看系统负载
- 2.使用 top 按 CPU 使用率排序
- 3.使用 ps 查看 CPU 使用最多的进程
- 4.使用 mpstat 查看 CPU 详细状态
- 一、查看内存运行状态
- 1.使用 free 查看内存使用
- 2.查看 /proc/meminfo 获取详细内存信息
- 3.使用 top 按内存使用排序
- 4.使用 ps 查看内存使用最多的进程
- 三、查看磁盘 I/O 状态
- 1.查看文件系统块大小
- EXT4:
- XFS:
- 2.使用 iostat 查看磁盘 I/O
- 3.使用 dd 测试磁盘写入
- 4.使用 iotop 查看实时 I/O 进程
- 四、查看网络状态
- 1.使用 nload 查看实时带宽
- 2.使用 nethogs 查看进程网络使用
- 五、查看系统整体状态
- 1.使用 vmstat 查看系统整体状态
- 2.使用 sar 记录系统状态
- 3.查看 sar 历史日志
一、系统调优概述与 CPU 负载查看
1.使用 uptime 查看系统负载
uptime
[root@centos7 /]# uptime19:40:21 up 9:25, 2 users, load average: 0.00, 0.01, 0.05
解读:
- 输出格式: 时间 运行时间 登录用户数 平均负载(1分钟、5分钟、15分钟)
若1分钟负载值 > CPU核心数,说明系统可能过载。 - 举个列子:若系统CPU核心数为1,此时1分钟负载值(1.25)> 1,说明系统可能短暂过载(需结合5分钟/15分钟负载趋势综合判断)
2.使用 top 按 CPU 使用率排序
步骤:
- 运行 top ;
- 按大写 P 按 CPU 使用率降序排列。
3.使用 ps 查看 CPU 使用最多的进程
ps -aux --sort -pcpu | head -10
ps -aux:列出系统中所有进程的详细信息
a:显示所有用户的进程
u:以用户为中心的格式显示(包含 CPU、内存等使用信息)
x:包括没有控制终端的进程
--sort -pcpu:按照 CPU 使用率(pcpu)进行排序,负号表示降序排列
| head -10:通过管道将结果传递给 head 命令,只显示前 10 行
4.使用 mpstat 查看 CPU 详细状态
mpstat -P ALL 1 5
mpstat:是系统性能监控工具 sysstat 包中的命令,用于报告 CPU 的统计信息
-P ALL:显示所有 CPU 核心(包括单个核心和整体平均)的统计数据
1:采样间隔时间,单位为秒(这里表示每 1 秒采集一次数据)
5:采样次数(这里表示总共采集 5 次)
[root@centos7 /]# mpstat -P ALL 1 5
Linux 3.10.0-1160.119.1.el7.x86_64 (centos7.2) 2025年08月27日 _x86_64_ (4 CPU)20时23分18秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
20时23分19秒 all 0.00 0.00 0.25 0.00 0.00 0.00 0.00 0.00 0.00 99.75
20时23分19秒 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
20时23分19秒 1 0.00 0.00 0.99 0.00 0.00 0.00 0.00 0.00 0.00 99.01
20时23分19秒 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
20时23分19秒 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.0020时23分19秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
20时23分20秒 all 0.00 0.00 0.25 0.00 0.00 0.00 0.00 0.00 0.00 99.75
20时23分20秒 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
20时23分20秒 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
20时23分20秒 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
20时23分20秒 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
。。。
%usr :用户空间CPU占比;
%sys :内核空间CPU占比;
%iowait :等待I/O占比;
%idle :空闲占比。
一、查看内存运行状态
1.使用 free 查看内存使用
free -m
[root@centos7 /]# free -mtotal used free shared buff/cache available
Mem: 3770 497 2201 14 1071 3015
Swap: 4095 0 4095
available 列表示实际可用内存(包括可回收的缓存)。
2.查看 /proc/meminfo 获取详细内存信息
[root@centos7 /]# cat /proc/meminfo
MemTotal: 3861076 kB
MemFree: 2254660 kB
MemAvailable: 3087532 kB
Buffers: 16 kB
Cached: 1007196 kB
SwapCached: 0 kB
Active: 1030832 kB
Inactive: 221516 kB
Active(anon): 160876 kB
Inactive(anon): 99056 kB
Active(file): 869956 kB
Inactive(file): 122460 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 4194300 kB
SwapFree: 4194300 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 245160 kB
Mapped: 98912 kB
Shmem: 14796 kB
Slab: 157944 kB
SReclaimable: 90092 kB
SUnreclaim: 67852 kB
KernelStack: 7440 kB
PageTables: 19872 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 6124836 kB
Committed_AS: 2228920 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 183528 kB
VmallocChunk: 34359310332 kB
Percpu: 36352 kB
HardwareCorrupted: 0 kB
AnonHugePages: 65536 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 126784 kB
DirectMap2M: 4067328 kB
DirectMap1G: 2097152 kB
Active :活跃内存;
Inactive :非活跃内存(可被换出)。
3.使用 top 按内存使用排序
- 运行 top ;
- 按大写 M 按内存使用降序排列。
4.使用 ps 查看内存使用最多的进程
ps -aux --sort -rss | head -10
三、查看磁盘 I/O 状态
1.查看文件系统块大小
EXT4:
tune2fs -l /dev/sda1 | grep "Block size"
用于 ext 系列文件系统(ext2/ext3/ext4)
tune2fs -l 会列出该文件系统的详细信息
输出类似:Block size: 4096(表示块大小为 4096 字节)
XFS:
fs_growfs -l /dev/sda1 | grep bsize
用于 XFS 文件系统
xfs_growfs -l 会显示 XFS 文件系统的布局信息
输出类似:bsize=4096(表示块大小为 4096 字节)
2.使用 iostat 查看磁盘 I/O
iostat -d -k -p /dev/sda 1 5
iostat:系统 I/O 统计工具,用于监控磁盘和 CPU 的输入输出性能
-d:只显示磁盘(device)的统计信息,不显示 CPU 信息
-k:以 KB(千字节)为单位显示数据(默认是块)
-p /dev/sda:显示指定磁盘/dev/sda及其所有分区的统计信息
1 5: 采样间隔为1秒,共采样5次
[root@centos7 /]# iostat -d -k -p /dev/sda 1 5
Linux 3.10.0-1160.119.1.el7.x86_64 (centos7.2) 2025年08月27日 _x86_64_ (4 CPU)Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 1.77 89.22 501.00 3297947 18518508
sda1 0.06 14.52 0.06 536691 2048
sda2 0.11 55.83 0.00 2063652 0
sda3 1.60 18.79 500.94 694368 18516460
。。。
kB_read/s :每秒读取数据量;
kB_wrtn/s :每秒写入数据量。
3.使用 dd 测试磁盘写入
dd if=/dev/zero of=testfile bs=1M count=1000; sync
dd if=/dev/zero of=testfile:使用dd命令从/dev/zero(一个源源不断输出 0 字节的特殊设备)读
取数据,写入到名为testfile的文件中
bs=1M:设置每次读写的块大小为 1MB
count=1000:设置读写的块数量为 1000,所以总文件大小是 1MB×1000=1000MB(约 1GB)
; sync:分号分隔两个命令,sync用于将内存中的数据强制刷新到磁盘,确保文件真正写入硬盘
4.使用 iotop 查看实时 I/O 进程
iotop -o -d 1
iotop:一个专门监控磁盘 I/O 的工具(需要 root 权限运行),可以显示每个进程的 I/O 使用情况
-o:只显示正在产生 I/O 活动的进程(过滤掉没有 I/O 操作的进程,更简洁)
-d 1:设置刷新间隔为 1 秒(每秒更新一次数据)
四、查看网络状态
1.使用 nload 查看实时带宽
yum install epel-release
yum install nload
nload
实时网络流量状态 (Incoming/Outgoing)
指标 值 说明
当前速率 (Curr) 41.12 kBit/s 瞬时接收速率
平均速率 (Avg) 166.04 kBit/s 本次会话的平均接收速率
最小速率 (Min) 3.49 kBit/s 本次会话的最小接收速率
最大速率 (Max) 1.33 MBit/s 本次会话的最大接收速率 (峰值)
总数据量 (Ttl) 81.77 MByte 本次会话累计接收的总数据量
操作:
在另一终端使用ab压测
ab -n 1000 -c 2 http://www.baidu.com/
#安装包 httpd-tools
ab:Apache 自带的 HTTP 压力测试工具,用于模拟多个用户并发访问网站并统计性能数据
-n 1000:指定总请求数为 1000 次(总共向百度首页发送 1000 个请求)
-c 2:指定并发数为 2(每次同时发送 2 个请求,模拟 2 个用户同时访问)
http://www.baidu.com/:目标测试的 URL(这里是百度首页)
Requests per second: 50.00 [#/sec] (mean) # 平均每秒处理请求数(吞吐量)
Time per request: 40.000 [ms] (mean) # 平均每个请求的响应时间
Time per request: 20.000 [ms] (mean, across all concurrent requests) # 并
发情况下每个请求的实际等待时间
Percentage of the requests served within a certain time (ms):
50% 30
90% 50
99% 80 # 99%的请求在80ms内完成
就是输入压测后在另一终端使用nload进行监测
2.使用 nethogs 查看进程网络使用
nethogs
操作:
在另一终端使用 wget 下载大文件,观察 nethogs 输出。
五、查看系统整体状态
1.使用 vmstat 查看系统整体状态
vmstat 1 5 虚拟内存统计(Virtual Memory Statistics)工具,能全面反映系统运行状态
1:采样间隔时间,单位为秒(每 1 秒刷新一次数据)
5:采样次数(总共输出 5 组数据)[root@centos7 /]# vmstat 1 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r b swpd free buff cache si so bi bo in cs us sy id wa st1 0 0 2254656 16 1097308 0 0 22 123 16 18 0 0 100 0 0r:等待运行的进程数(如果长期大于 CPU 核心数,说明 CPU 不够用)
b:处于不可中断睡眠的进程数(通常是等待 I/O,数值高说明 I/O 繁忙)
si/so:每秒从 swap 分区读入 / 写入内存的数据量(非 0 说明内存不足,开始用交换分区)
bi/bo:每秒从块设备读入 / 写入的数据量(反映磁盘 I/O 活动)
wa:CPU 等待 I/O 的时间百分比(超过 20% 说明 I/O 成为瓶颈)
us/sy:用户态 / 内核态占用 CPU 的百分比(us 高说明应用消耗 CPU 多,sy 高可能是系统调用频繁)
id:CPU 空闲百分比(过低说明 CPU 负载高)
r :运行队列长度;
b :阻塞进程数;
si/so :换入/换出内存;
bi/bo :块读/写。
2.使用 sar 记录系统状态
sar -u 2 5 -o cpu.sar # 记录CPU
-u:查看 CPU 使用率统计
2 5:每 2 秒采样一次,共采样 5 次
-o cpu.sar:将结果保存到文件cpu.sar(方便后续用sar -f cpu.sar查看)
输出中重点关注:
%user:用户程序占用 CPU 的比例
%sys:系统内核占用 CPU 的比例
%idle:CPU 空闲比例(过低说明 CPU 负载高)
sar -r 1 5 # 记录内存
-r:查看内存和交换空间使用情况
1 5:每 1 秒采样一次,共采样 5 次
输出中重点关注:
memused:已使用内存百分比
freemem:空闲内存大小
swapused:交换空间使用百分比(非 0 可能表示内存紧张)
sar -n DEV 1 5 # 记录网络
-r:查看内存和交换空间使用情况
1 5:每 1 秒采样一次,共采样 5 次
输出中重点关注:
memused:已使用内存百分比
freemem:空闲内存大小
swapused:交换空间使用百分比(非 0 可能表示内存紧张)
3. sar -n DEV 1 5(监控网络)
-n DEV:查看网络接口(如 eth0、ens33)的流量统计
1 5:每 1 秒采样一次,共采样 5 次
输出中重点关注:
rxpck/s:每秒接收的数据包数
txpck/s:每秒发送的数据包数
rxkB/s:每秒接收的千字节数
txkB/s:每秒发送的千字节数(数值过高可能表示网络带宽饱和)
查看记录:
sar -u -f cpu.sar
3.查看 sar 历史日志
ls /var/log/sa
sar -n DEV -f /var/log/sa/sa15