Linux系统调优工具
Linux系统调优工具
- 前言
- 一、系统调优概述与CPU负载查看
- 1.1. 使用 uptime查看系统负载
- 1.2. 使用 top按CPU使用率排序
- 1.3. 使用 ps查看CPU使用最多的进程
- 1.4. 使用 mpstat查看CPU详细状态
- 二、查看内存运行状态
- 2.1. 使用 free查看内存使用
- 2.2. 查看 /proc/meminfo获取详细内存信息
- 2.3. 使用 top按内存使用排序
- 2.4. 使用 ps查看内存使用最多的进程
- 三、查看磁盘I/O状态
- 3.1. 查看文件系统块大小
- 3.2. 使用 iostat查看磁盘I/O
- 3.3. 使用 dd测试磁盘写入
- 3.4. 使用 iotop查看实时I/O进程
- 四、查看网络状态
- 4.1. 使用 nload查看实时带宽
- 4.2. 使用 nethogs查看进程网络使用
- 五、查看系统整体状态
- 5.1. 使用 vmstat查看系统整体状态
- 5.2. 使用 sar记录系统状态
- 5.2.1. sar -u 1 5
- 5.2.2. sar -r 1 5
- 5.2.3. sar -n DEV 1 5
- 5.2.4. sar -u -f cpu.sar
- 六、总结
前言
在当今的数字化时代,Linux操作系统因其稳定性、灵活性和强大的性能,被广泛应用于服务器、嵌入式设备以及个人电脑中。然而,随着系统使用时间的增长和应用需求的增加,Linux系统可能会遇到性能瓶颈。为了确保系统的高效运行,系统调优成为了运维工程师和系统管理员的重要任务。本文将详细介绍一系列Linux系统调优工具,帮助读者更好地监控和优化系统性能。
一、系统调优概述与CPU负载查看
1.1. 使用 uptime查看系统负载
uptime是一个简单而有效的工具,用于查看系统的整体运行状态。通过运行 uptime命令,我们可以获取系统的当前时间、运行时间、登录用户数以及平均负载。平均负载是衡量系统负载的重要指标,它表示在特定时间段内(1分钟、5分钟、15分钟)系统处于可运行或不可中断状态的平均进程数。如果1分钟负载值超过了CPU的核心数,这通常意味着系统可能正在经历短暂的过载。
- 输出格式:
时间 运行时间 登录用户数 平均负载(1分钟、5分钟、15分钟)
- 若1分钟负载值 > CPU核心数,说明系统可能过载。
举个列子:若系统CPU核心数为1,此时1分钟负载值(1.25)> 1,说明系统可能短暂过载(需结合5分钟/15分钟负载趋势综合判断
1.2. 使用 top按CPU使用率排序
top命令是Linux系统管理员的瑞士军刀,它提供了一个实时的视图,展示了系统中运行的进程及其资源使用情况。通过按大写 P键,我们可以按照CPU使用率对进程进行降序排列,从而快速识别出消耗CPU资源最多的进程。
1. 运行 top;
2. 按大写 P 按 CPU 使用率降序排列。
1.3. 使用 ps查看CPU使用最多的进程
ps命令用于列出系统中的所有进程。通过结合使用 ps -aux --sort -pcpu | head -10,我们可以获取CPU使用率最高的前10个进程,这对于定位CPU密集型应用非常有帮助。
ps -aux --sort -pcpu | head -10
ps -aux:列出系统中所有进程的详细信息a:显示所有用户的进程u:以用户为中心的格式显示(包含 CPU、内存等使用信息)x:包括没有控制终端的进程
--sort -pcpu:按照 CPU 使用率(pcpu)进行排序,负号表示降序排列
| head -10:通过管道将结果传递给 head 命令,只显示前 10 行
1.4. 使用 mpstat查看CPU详细状态
mpstat是 sysstat工具包的一部分,它提供了关于CPU使用情况的详细统计信息。通过 mpstat -P ALL 1 5
命令,我们可以监控所有CPU核心的使用情况,包括用户空间、内核空间、I/O等待和空闲时间的占比。
mpstat:是系统性能监控工具 sysstat 包中的命令,用于报告 CPU 的统计信息
-P ALL:显示所有 CPU 核心(包括单个核心和整体平均)的统计数据
1:采样间隔时间,单位为秒(这里表示每 1 秒采集一次数据)
5:采样次数(这里表示总共采集 5 次)
mpstat -P ALL 1 5
%usr:用户空间CPU占比;
%sys:内核空间CPU占比;
%iowait:等待I/O占比;
%idle:空闲占比。
二、查看内存运行状态
2.1. 使用 free查看内存使用
free命令用于显示系统的内存使用情况。通过 free -m,我们可以以兆字节为单位查看内存的使用情况,特别是 available列,它表示系统实际可用的内存量,包括可回收的缓存。
available
列表示实际可用内存(包括可回收的缓存)。
2.2. 查看 /proc/meminfo获取详细内存信息
/proc/meminfo文件包含了系统内存使用的详细信息。通过查看这个文件,我们可以获取更多关于内存使用情况的细节,如活跃内存和非活跃内存。
cat /proc/meminfo
Active:活跃内存;
Inactive:非活跃内存(可被换出)。
2.3. 使用 top按内存使用排序
在 top命令中,按大写 M键可以按照内存使用情况对进程进行排序,这样我们可以快速找到内存消耗最大的进程。
1. 运行 top;
2. 按大写 M 按内存使用降序排列。
2.4. 使用 ps查看内存使用最多的进程
通过 ps -aux --sort -rss | head -10命令,我们可以获取内存使用量最高的前10个进程,这对于内存优化至关重要。
ps -aux --sort -rss | head -10
三、查看磁盘I/O状态
3.1. 查看文件系统块大小
了解文件系统的块大小对于磁盘性能调优非常重要。对于EXT4文件系统,我们可以使用 tune2fs命令来查看块大小;而对于XFS文件系统,则可以使用 xfs_growfs命令。
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 字节)
3.2. 使用 iostat查看磁盘I/O
iostat是一个强大的工具,用于监控磁盘的输入输出性能。通过 iostat -d -k -p /dev/sda 1 5命令,我们可以获取指定磁盘的读写速度等关键指标。
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 次
3.3. 使用 dd测试磁盘写入
dd命令可以用来测试磁盘的写入性能。通过写入一个大文件并使用 sync命令确保数据写入磁盘,我们可以评估磁盘的写入速度。
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用于将内存中的数据强制刷新到磁盘,确保文件真正写入硬盘
3.4. 使用 iotop查看实时I/O进程
iotop是一个专门用于监控磁盘I/O的工具,它可以显示每个进程的I/O使用情况。通过 iotop -o -d 1,我们可以实时查看哪些进程正在进行磁盘I/O操作。
iotop -o -d 1
#iotop:一个专门监控磁盘 I/O 的工具(需要 root 权限运行),可以显示每个进程的 I/O 使用情况
#-o:只显示正在产生 I/O 活动的进程(过滤掉没有 I/O 操作的进程,更简洁)
#-d 1:设置刷新间隔为 1 秒(每秒更新一次数据)
四、查看网络状态
4.1. 使用 nload查看实时带宽
nload是一个简单的网络流量监控工具,它可以实时显示网络的接收和发送速率。通过 nload,我们可以监控网络流量的实时状态。
#实时网络流量状态 (Incoming/Outgoing)
#指标 值 说明
#当前速率 (Curr) 961.48 kBit/s 瞬时接收速率
#平均速率 (Avg) 131.55 kBit/s 本次会话的平均接收速率
#最小速率 (Min) 728 kBit/s 本次会话的最小接收速率
#最大速率 (Max) 1018.01 kBit/s 本次会话的最大接收速率 (峰值)
#总数据量 (Ttl) 13.67 MByte 本次会话累计接收的总数据量
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内完成
4.2. 使用 nethogs查看进程网络使用
nethogs是一个按进程显示网络带宽使用情况的工具。通过 nethogs,我们可以快速识别出哪些进程正在使用大量的网络带宽。
wget http://issuecdn.baidupcs.com/issue/netdisk/yunguanjia/BaiduNetdisk_5.5.3.exe
五、查看系统整体状态
5.1. 使用 vmstat查看系统整体状态
vmstat是一个多功能的工具,用于报告虚拟内存统计信息,包括进程、内存、分页、块IO、陷阱和CPU活动。通过 vmstat 1 5,我们可以获得系统整体性能的快照。
vmstat 1 5
# 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`:块读/写。
5.2. 使用 sar记录系统状态
sar是 sysstat工具包中的一个强大工具,用于收集、报告和保存系统活动信息。通过 sar,我们可以记录和查看CPU、内存、网络等资源的使用情况。
5.2.1. sar -u 1 5
sar -u 2 5 -o cpu.sar
-u:查看 CPU 使用率统计
2 5:每 2 秒采样一次,共采样 5 次
-o cpu.sar:将结果保存到文件cpu.sar(方便后续用sar -f cpu.sar查看)
输出中重点关注:
%user:用户程序占用 CPU 的比例
%sys:系统内核占用 CPU 的比例
%idle:CPU 空闲比例(过低说明 CPU 负载高)
5.2.2. sar -r 1 5
sar -r 1 5 # 记录内存
-r:查看内存和交换空间使用情况1 5:每 1 秒采样一次,共采样 5 次
输出中重点关注:memused:已使用内存百分比freemem:空闲内存大小swapused:交换空间使用百分比(非 0 可能表示内存紧张)
5.2.3. sar -n DEV 1 5
sar -n DEV 1 5 # 记录网络
-r:查看内存和交换空间使用情况
1 5:每 1 秒采样一次,共采样 5 次
输出中重点关注:
memused:已使用内存百分比
freemem:空闲内存大小
swapused:交换空间使用百分比(非 0 可能表示内存紧张)
-n DEV:查看网络接口(如 eth0、ens33)的流量统计
1 5:每 1 秒采样一次,共采样 5 次
输出中重点关注:
rxpck/s:每秒接收的数据包数
txpck/s:每秒发送的数据包数
rxkB/s:每秒接收的千字节数
txkB/s:每秒发送的千字节数(数值过高可能表示网络带宽饱和)
5.2.4. sar -u -f cpu.sar
sar -u -f cpu.sar
- 找出当前系统中 CPU 使用最高的进程,并尝试分析其是否为正常进程;
- 模拟高 I/O 场景,使用
iotop
定位 I/O 密集型进程; - 使用
sar
记录一天中 CPU 和内存的使用趋势,并写出分析报告。
ls /var/log/sa/
sar -u -f /var/log/sa/sa25
sar -n DEV -f /var/log/sa/sa25
六、总结
Linux系统调优是一个持续的过程,需要系统管理员不断地监控和调整。通过使用上述工具,我们可以有效地监控系统性能,及时发现并解决性能瓶颈。本文介绍了多种Linux系统调优工具的使用方法,希望能够帮助读者更好地理解和优化Linux系统性能。
通过这些工具,我们可以对CPU、内存、磁盘I/O和网络状态进行全面的监控,从而确保Linux系统的高效和稳定运行。记住,系统调优不仅仅是一次性的任务,而是一个需要持续关注和调整的过程。希望本文能够成为您系统调优之旅的一个有用指南。