Linux系统调优工具
·
Linux系统调优相关工具
Linux系统调优工具
本章内容
- 重点:
top,mpstat,free,iostat,iotop,nethogs,vmstat,sar等工具的使用; - 难点:理解各子系统之间的相互影响,正确解读工具输出信息。
- 确保已安装
sysstat,iotop,nethogs,nload等工具包。
1.系统调优概述与 CPU 负载查看
案例1:使用 uptime 查看系统负载
步骤:
uptime

解读:
-
输出格式:
时间 运行时间 登录用户数 平均负载(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 次)

解读:
%usr:用户空间CPU占比;%sys:内核空间CPU占比;%iowait:等待I/O占比;%idle:空闲占比。
2.查看内存运行状态
案例1:使用 free 查看内存使用
free -m

解读:
available列表示实际可用内存(包括可回收的缓存)。
案例2:查看 /proc/meminfo 获取详细内存信息
cat /proc/meminfo

关注:
Active:活跃内存;Inactive:非活跃内存(可被换出)。
案例3:使用 top 按内存使用排序
- 运行
top; - 按大写
M按内存使用降序排列。
案例4:使用 ps 查看内存使用最多的进程
ps -aux --sort -rss | head -10

3.查看磁盘 I/O 状态
案例1:查看文件系统块大小
EXT4:
tune2fs -l /dev/sda1 | grep "Block size"
用于 ext 系列文件系统(ext2/ext3/ext4)
tune2fs -l 会列出该文件系统的详细信息
输出类似:Block size: 4096(表示块大小为 4096 字节)
XFS:
xfs_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 次

解读:
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 秒(每秒更新一次数据)

操作:
- 在另一个终端执行
find /或大量文件操作,观察iotop输出。
4.查看网络状态
案例1:使用 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内完成

案例2:使用 nethogs 查看进程网络使用
nethogs

操作:
- 在另一终端使用
wget下载大文件,观察nethogs输出。
5.查看系统整体状态
案例1:使用 vmstat 查看系统整体状态
vmstat 1 5 虚拟内存统计(Virtual Memory Statistics)工具,能全面反映系统运行状态
1:采样间隔时间,单位为秒(每 1 秒刷新一次数据)
5:采样次数(总共输出 5 组数据)
r:等待运行的进程数(如果长期大于 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

6.总结
- 找出当前系统中 CPU 使用最高的进程,并尝试分析其是否为正常进程;
- 模拟高 I/O 场景,使用
iotop定位 I/O 密集型进程; - 使用
sar记录一天中 CPU 和内存的使用趋势,并写出分析报告。
更多推荐


所有评论(0)