在服务器运维过程中,我们经常会遇到 CPU 占用率过高、磁盘 I/O 达到瓶颈等性能问题。这时,我们需要一款强大的工具来帮助我们诊断问题,sar 命令就是这样一款利器。sar (System Activity Reporter) 能够全面地报告 Linux 系统的各项活动信息,包括 CPU 使用率、内存使用情况、磁盘 I/O、网络流量等等,为我们定位性能瓶颈提供有力的数据支撑。
sar 命令的基本使用
sar 命令的基本语法如下:
sar [选项] [间隔时间] [重复次数]
- 选项: 用于指定要报告的系统活动类型,例如
-u报告 CPU 使用率,-r报告内存使用情况,-d报告磁盘 I/O 等等。 - 间隔时间: 指定报告之间的时间间隔,单位为秒。
- 重复次数: 指定报告的次数。如果不指定重复次数,则
sar会一直报告,直到手动停止。
例如,要每隔 1 秒报告一次 CPU 使用率,重复 5 次,可以使用以下命令:
sar -u 1 5
常用 sar 命令选项详解
以下是一些常用的 sar 命令选项:
-u:报告 CPU 使用率。输出的指标包括%user(用户态 CPU 使用率)、%nice(nice 进程 CPU 使用率)、%system(内核态 CPU 使用率)、%iowait(等待 I/O CPU 使用率)、%steal(被虚拟机偷走的 CPU 使用率)、%idle(空闲 CPU 使用率)。-r:报告内存使用情况。输出的指标包括kbmemfree(空闲内存大小)、kbmemused(已用内存大小)、%memused(内存使用率)、kbbuffers(用于缓冲区内存大小)、kbcached(用于缓存的内存大小)。-d:报告磁盘 I/O。输出的指标包括tps(每秒传输数)、rd_sec/s(每秒读取扇区数)、wr_sec/s(每秒写入扇区数)、await(平均 I/O 等待时间)、svctm(平均 I/O 服务时间)、%util(磁盘利用率)。当磁盘%util接近 100% 时,说明磁盘 I/O 已经达到瓶颈。-n DEV:报告网络接口的流量。输出的指标包括rxpck/s(每秒接收数据包数)、txpck/s(每秒发送数据包数)、rxkB/s(每秒接收数据量)、txkB/s(每秒发送数据量)。-b:报告 I/O 和传输速率的统计信息。-q:报告队列长度和负载的统计信息。-W:报告交换分区的使用情况。-A:报告所有活动信息。
使用 sar 命令分析 Nginx 性能瓶颈
假设我们使用 Nginx 作为 Web 服务器,发现网站访问速度变慢。我们可以使用 sar 命令来分析 Nginx 的性能瓶颈。
首先,我们可以使用 sar -u 1 10 命令来查看 CPU 使用率。如果 %iowait 很高,说明可能是磁盘 I/O 导致了性能瓶颈。这时,我们可以使用 sar -d 1 10 命令来查看磁盘 I/O。如果磁盘 %util 接近 100%,说明磁盘 I/O 已经达到瓶颈。我们可以考虑更换更快的磁盘,或者使用 RAID 技术来提高磁盘 I/O 性能。同时也要检查 Nginx 的 access log,是否存在大量的慢请求。还可以通过 tcpdump 抓包分析网络是否存在异常。
如果 %user 和 %system 都很高,说明可能是 CPU 密集型操作导致了性能瓶颈。我们可以使用 top 命令来查看哪些进程占用了大量的 CPU 资源。例如,可能是 Nginx 的 worker 进程占用了大量的 CPU 资源,这时,我们可以考虑优化 Nginx 的配置,例如增加 worker 进程的数量,或者使用缓存技术来减少 CPU 的负载。
此外,如果内存使用率很高,可以使用 sar -r 1 10 命令来查看内存使用情况。如果 kbcached 和 kbbuffers 很高,说明可能是缓存占用了大量的内存资源。我们可以调整 Linux 的内核参数,例如 vm.vfs_cache_pressure,来控制缓存的使用。
sar 命令实战避坑经验总结
- 理解
sar命令输出的指标含义: 只有理解了sar命令输出的指标含义,才能正确地分析系统性能瓶颈。 - 结合其他工具一起使用:
sar命令只是一个工具,我们需要结合其他工具,例如top、vmstat、iostat等,才能更全面地了解系统性能。 - 关注趋势变化: 不要只看
sar命令的单次输出,要关注指标的趋势变化,才能更准确地判断系统性能瓶颈。 - 提前规划历史数据存储:默认情况下,
sar命令的历史数据存储在/var/log/sa/目录下,并且只会保留最近一段时间的数据。如果需要长期监控系统性能,需要配置sar命令的历史数据存储,例如可以配置sar命令每天生成一个独立的数据文件。可以使用sadc命令定时采集数据,并使用sa1、sa2等脚本进行数据汇总和存储。同时,可以通过配置logrotate来管理历史数据,避免磁盘空间被占满。 - 注意时间同步:确保服务器的时间是同步的,否则
sar命令输出的数据可能会出现偏差。可以使用ntp或者chrony等工具来同步服务器时间。
总之,sar 命令是一款非常强大的 Linux 系统性能监控工具,掌握 sar 命令的使用,可以帮助我们快速定位系统性能瓶颈,提高服务器的稳定性和性能。
冠军资讯
linuxer_zhao