查看原文
其他

掌握这条Linux命令,服务器性能问题一网打尽

船神 脚本之家 2022-04-23
 关注“脚本之家”,与百万开发者在一起

首先我自己都感到不好意思,这个命令几乎没有用过(尴尬)。最近在翻查Linux的一些命令,发现自己居然对它很陌生,所以赶紧恶补一下,扩充一下自己。

sar命令简介

sar它的英文全称是:System Activity Reporter,意为系统活动情况报告。是目前 Linux 上最为全面的系统性能分析工具之一,通过该命令可以全面地获取系统的 CPU、运行队列、磁盘读写(I/O)、分区(交换区)、内存、CPU 中断和网络等性能数据。因此可以用它来找出一些性能问题,帮助我们提升服务器的性能做出很好的决策指引。

sar命令格式讲解

sar [options] [-o filename] interval [count]

在上述命令格式中,各参数的含义如下:

  • -o filename:filename 为文件名,此选项表示将命令结果以二进制格式存放在文件中
  • interval:采样的间隔时间,需要手动设置
  • count:采样的次数,可以自定义,默认是为1
  • options:命令选项,大概有十来种,详细如下表格
选项值选项说明
-A显示系统所有资源设备的运行状况
-u显示系统所有CPU的负载状态。
-d显示系统所有硬盘设备的活动信息
-r显示系统内存和交换空间的情况
-b显示I/O和传送速率情况
-n显示网络运行状态,此选项后可跟 DEV(显示网络接口信息)、EDEV(显示网络错误的统计数据)、SOCK(显示套接字信息)和 FULL(等同于使用 DEV、EDEV和SOCK)等
-q显示运行列表中的进程数、进程大小、系统平均负载等
-R显示进程在采样时的活动情况
-y显示终端设备的活动情况
-w显示系统交换活动的状态

以上只是列出来了部分选项,更多的选项可以通过man sar来查看。

使用举例

1、比如我们想要查看系统CPU的整理状况,每3秒统计一次,总共统计4次,可以执行:

sar -u 3 4

执行结果如下图:


在执行结果中,总共有8列,第一列很清楚的知道是统计时间,第二列表示是所有cpu。

  • %user:用于表示用户模式下消耗的 CPU 时间的比例;
  • %nice:CPU处在带NICE值的用户模式下的时间百分比例;
  • %system:系统模式下消耗的 CPU 时间的比例;
  • %iowait:CPU 等待磁盘 I/O 导致空闲状态消耗的时间比例;
  • %steal:利用 Xen 等操作系统虚拟化技术,等待其它虚拟 CPU 计算占用的时间比例;
  • %idle:CPU 空闲时间比例。

通过上面对结果列的解释,我们应该需要注意的是iowaitidle,如果 iowait的值偏高,则表示遇到了I/O瓶颈;idle值偏高,则表示CPU比较空闲。如果idle值高但系统响应比较慢,有可能这个时候CPU在等待内存分配,这个时候我们应加大内存容量。如果idle值如果一直偏低,一般情况大家都认为低于10,那么我们就需要解决cpu的问题。

2、比如我需要查看内存的使用情况,每3秒统计一次,总共统计5次,可以执行:

sar -r 3 5

执行结果如下图:


各列的说明如下:

  • kbmemfree:这个值和我们执行free命令之后的free列值会基本一致,它不包含缓存和缓冲空间(buffer和cache的空间)
  • kbmemused:这个值和我们执行free命令之后的used列值会基本一致,它包括buffer和cache的空间
  • %memused:kbmemused值和内存总量的一个百分比
  • kbbuffers和kbcached:这两个值就是free命令中的buffer和cache
  • kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM + swap)
  • %commit:这个值是kbcommit与内存总量(包括swap)的一个百分比
  • kbactive:活动内存量
  • kbinact:不活动内存量
  • kbdirty:等待写入磁盘的内存,以KB为单位

3、如果想要查看系统磁盘的读写性能,每3秒统计一次,总共统计5次,可执行如下命令:

sar -d 3 5

执行结果如下图:

各列的说明如下::

  • tps:每秒从物理磁盘 I/O 的次数。注意,多个逻辑请求会被合并为一个 I/O 磁盘请求,一次传输的大小是不确定的
  • rd_sec/s:每秒读扇区的次数
  • wr_sec/s:每秒写扇区的次数
  • avgrq-sz:平均每次设备 I/O 操作的数据大小(扇区)
  • avgqu-sz:磁盘请求队列的平均长度
  • await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1 秒=1000 毫秒)
  • svctm:系统处理每次请求的平均时间,不包括在请求队列中消耗的时间
  • %util:I/O 请求占 CPU 的百分比,比率越大,说明越饱和

这里我只演示了几个参数的使用讲解,关于其他参数的用法,大家可以自行运行进行查看。欢迎一起交流学习。

- END -

  推荐阅读:

在 Linux 命令行里与其他用户通信

1000+个常用的Linux命令!

干货:5个文件目录操作相关Linux命令详解

每日打卡赢积分兑换书籍入口


 由于微信公众号近期改变了推送规则,如果你想如常看到我们的文章,可以时常点击文末右下角的「在看」;或者将 脚本之家 星标。

这样操作后,我们每次新的推送才能第一时间出现在你的订阅列表中~


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存