Linux中的SAR命令

时间:2020-03-05 15:29:50  来源:igfitidea点击:

SAR命令用于生成各种资源的统计报告,包括CPU使用率,内存利用率,I/O设备消耗,网络监视器,交换和加载平均值。

SAR代表系统活动记者,任何Linux管理员都非常有用的工具,用于监控系统性能并调查瓶颈。
该工具由Sysstat包提供。

在本教程中,我们将通过如何安装Sysstat包并在Linux上使用SAR命令。

安装sysstat包

Sysstat包包含许多实用程序,这些实用程序是Linux系统的性能监控工具的集合。
SAR是一个属于Sysstat包的工具。

在Rhel和CentOS上安装Sysstat包

$sudo yum install sysstat

一旦SYSSTAT已成功安装,请通过命令验证安装:

$which sar
/usr/bin/sar

默认情况下,SysStat将存储文件'/var/log/sa/sadd'中的服务器统计信息(dd是月的日期,例如:/var/log/sa/sa08),并将数据保持28天。
如果要将数据保留更多,则需要修改sysstat配置文件'/etc/sysconfig/sysstat'。

$sudo cat /etc/sysconfig/sysstat
HISTORY=28

用要保留日志的天数修改"历史记录"的值。

在Ubuntu和Debian上安装Sysstat包

$sudo apt install sysstat

按命令验证安装:

$which sar
/usr/bin/sar

在Ubuntu上,我们需要在不需要CentOS时启用它。

使用我们喜欢的编辑器(Vim,Nano或者Gedit)来编辑以下文件:

$sudo nano /etc/default/sysstat

并设置为"启用"到"真实":

ENABLED="true"

重新启动服务

$sudo service sysstat restart

在Ubuntu上,配置文件是"/etc/sysstat/sysstat",默认情况下,数据将在7天内保存。

$cat /etc/sysstat/sysstat
HISTORY=7

来自Fedora 21,Sysstat默认情况下,我们需要做的就是在下面的命令下运行:

$sudo systemctl enable sysstat.service
$sudo systemctl start sysstat.service

Sysstat有一个Cron作业,在每10分钟内运行一次以收集数据,并将其存储在相应的文件/var/log/sa/sadd中。
如果要更改此Cron运行的时间间隔,则可以在"/etc/cron.d/sysstat"中修改它。

对于SystemD,定时器单元文件调用sysstat-collect.service(/usr/lib/systemd/sysery/sysstat-collect.service)每10分钟收集统计数据。

$cat /etc/cron.d/sysstat
# Activity reports every 10 minutes everyday
5-55/10 * * * * root command -v debian-sa1 > /dev/null && debian-sa1 1 1
# Additional run at 23:59 to rotate the statistics file
59 23 * * * root command -v debian-sa1 > /dev/null && debian-sa1 60 2

SAR命令用法

SAR命令用法的基本语法如下:

sar [option] [-o filename] [-f filename] [interval] [count]

其中:

间隔:时间为单位。

计数:制作输出统计信息的次数。

1.找到CPU活动

默认情况下(没有给定其他选项)SAR命令将报告服务器的CPU活动。
此外,Option-u可用于获取CPU利用率报告。

如果要在每2秒内获得CPU活动报告3次,则可以使用以下SAR命令:

$sar -u 2 3
Linux 3.10.0-1127.10.1.el7.x86_64 (localhost.localdomain) 	09/06/2017 	_x86_64_	(2 CPU)
22:26:54        CPU     %user     %nice   %system   %iowait    %steal     %idle
22:26:56        all      4,03      0,00      0,50      0,00      0,00     95,47
22:26:58        all      8,08      0,00      0,51      0,00      0,00     91,41
22:27:00        all     12,50      0,00      1,00      0,00      0,00     86,50
Average:        all      8,21      0,00      0,67      0,00      0,00     91,11

其中:

%用户表示在用户级别(用户空间)执行时发生的CPU利用率的百分比

%系统表示在系统级别(内核空间)执行时发生的CPU利用率的百分比

%闲置是CPU或者CPU空闲的时间百分比,系统没有出色的磁盘I/O请求。

如果要以二进制形式获取文件中的输出,则需要使用sar命令追加-ofileName。
例如:

$sar -u 2 3 -o log-file

此外,我们可以获得特定日期的CPU活动报告,例如:6月9日,2017年。
我们可以找到:

$sudo sar -u -f /var/log/sa/sa09

2.找到每个处理器的CPU使用率

-u选项为所有处理器提供CPU使用率。
如果要单独查找所有处理器上的CPU活动,则需要使用-p选项。

$sar -P ALL 1 1
Linux 3.10.0-1127.10.1.el7.x86_64 (localhost.localdomain) 	10/06/2017 	_x86_64_	(2 CPU)
05:38:18        CPU     %user     %nice   %system   %iowait    %steal     %idle
05:38:19        all      3,03      0,00      0,00      0,00      0,00     96,97
05:38:19          0      3,96      0,00      0,99      0,00      0,00     95,05
05:38:19          1      3,00      0,00      0,00      0,00      0,00     97,00
Average:        CPU     %user     %nice   %system   %iowait    %steal     %idle
Average:        all      3,03      0,00      0,00      0,00      0,00     96,97
Average:          0      3,96      0,00      0,99      0,00      0,00     95,05
Average:          1      3,00      0,00      0,00      0,00      0,00     97,00

3.找到内存使用

我们可以使用"-R"交换机在时间上找到内存用法(服务器使用和免费内存)。

$sar -r 1 3
Linux 3.10.0-1127.10.1.el7.x86_64 (localhost.localdomain) 	10/06/2017 	_x86_64_	(2 CPU)
05:41:04    kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
05:41:05       855300   3025220     77,96         0   1495276   2426864     30,55   1265008   1158172       100
05:41:06       854800   3025720     77,97         0   1495276   2426864     30,55   1265132   1158172       100
05:41:07       855032   3025488     77,97         0   1495276   2426864     30,55   1265012   1158172       100
Average:       855044   3025476     77,97         0   1495276   2426864     30,55   1265051   1158172       100

其中:

kbmemfree表示以千字节为单位提供的可用内存量。

kbmemused表示千字节中使用的内存量。
这不会考虑内核本身使用的内存。

如果我们想收集特定一天的内存用法说:905,我们需要将其作为以下命令运行:

$sar -r -f /var/log/sa/sa05

4.找到交换活动

我们可以使用"-W"选项检查计算机的交换使用情况。

$sar -W 1 3
Linux 2.6.18-274.18.1.el5 (myserver) 09/06/2012
03:31:12 PM pswpin/s pswpout/s
03:31:13 PM 16.16 0.00
03:31:14 PM 16.00 0.00
03:31:15 PM 15.84 0.00
Average: 16.00 0.00

其中:

pswpin/s表示系统带来每秒的交换页面的总数。

pswpout/s表示系统每秒带出的交换页面的总数。

如果我们想收集特定一天的交换用法,请905日9月,我们需要将其运行如下SAR命令:

$sar -W -f /var/log/sa/sa05

5.随着时间的推移查找加载平均值

我们可以使用"-Q"选项查找加载平均随时加班。

$sar -q 1 3
Linux 3.10.0-1127.10.1.el7.x86_64 (localhost.localdomain) 	10/06/2017 	_x86_64_	(2 CPU)
06:16:13      runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
06:16:14            0       329      0,00      0,04      0,09         0
06:16:15            0       329      0,00      0,04      0,09         0
06:16:16            0       329      0,00      0,04      0,09         0
Average:            0       329      0,00      0,04      0,09         0

其中:

runq-sz:它显示了运行队列长度(等待运行时间的任务数)。

Plist-SZ:它显示了任务列表中的任务数。

LDAVG-1/5/15:最后一分钟/过去5分钟/过去5分钟的系统负载平均值。

如果我们想收集特定日期的负载平均值,请在05月9日,我们需要在SAR命令之后运行它:

$sar -q -f /var/log/sa/sa05

6.已安装文件系统的报告

我们可以使用-f选项获取当前文件系统的统计信息

$sar -F 2 3
Linux 3.10.0-1127.10.1.el7.x86_64 (localhost.localdomain) 	10/06/2017 	_x86_64_	(2 CPU)
06:30:18     MBfsfree  MBfsused   %fsused  %ufsused     Ifree     Iused    %Iused FILESYSTEM
06:30:20        30410      5532     15,39     15,39  18245113    166407      0,90 /dev/mapper/centos-root
06:30:20          796       218     21,52     21,52    523947       341      0,07 /dev/sda1
06:30:20     MBfsfree  MBfsused   %fsused  %ufsused     Ifree     Iused    %Iused FILESYSTEM
06:30:22        30410      5532     15,39     15,39  18245113    166407      0,90 /dev/mapper/centos-root
06:30:22          796       218     21,52     21,52    523947       341      0,07 /dev/sda1
06:30:22     MBfsfree  MBfsused   %fsused  %ufsused     Ifree     Iused    %Iused FILESYSTEM
06:30:24        30410      5532     15,39     15,39  18245113    166407      0,90 /dev/mapper/centos-root
06:30:24          796       218     21,52     21,52    523947       341      0,07 /dev/sda1
Summary:     MBfsfree  MBfsused   %fsused  %ufsused     Ifree     Iused    %Iused FILESYSTEM
Summary         30410      5532     15,39     15,39  18245113    166407      0,90 /dev/mapper/centos-root
Summary           796       218     21,52     21,52    523947       341      0,07 /dev/sda1

如果要收集特定日期的装载文件系统,请参阅6月10日。

$sar -F -f /var/log/sa/sa10

7.报告inode,内核表和文件表的详细信息

我们可以通过使用具有"-V"选项的SAR命令来获取系统使用的inode,进程,内核线程和文件表的详细信息。

$sar -v 2 3
Linux 3.10.0-1127.10.1.el7.x86_64 (localhost.localdomain) 	10/06/2017 	_x86_64_	(2 CPU)
06:57:23    dentunusd   file-nr  inode-nr    pty-nr
06:57:25       160833      2400    132081         3
06:57:27       160833      2400    132081         3
06:57:29       160833      2400    132081         3
Average:       160833      2400    132081         3

其中:

dentunusd:目录缓存中未使用的缓存条目数

file-nr:使用内部文件处理号码

inode-nr:inode处理程序

PTY-NR:伪终端

8.检查CPU瓶颈

我们可以使用SAR命令找出可能导致CPU瓶颈可能的中断数字。

在下面的例子中,"#9"是排除最高的系统中断#0

$sar -I XALL 2 10
02:07:10 AM INTR intr/s
02:07:12 AM 0 992.57
02:07:12 AM 1 0.00
02:07:12 AM 2 0.00
02:07:12 AM 3 0.00
02:07:12 AM 4 0.00
02:07:12 AM 5 0.00
02:07:12 AM 6 0.00
02:07:12 AM 7 0.00
02:07:12 AM 8 0.00
02:07:12 AM 9 350.50

"/proc /中断"文件中的详细信息还将为我们提供帮助。
中断暂时停止处理,以便可能发生I/O或者其他操作。
发生特定操作后处理恢复。
因此,必须为机器中安装的每个设备提供的中断设置非常重要,该设置不会与硬件和其他外围设备使用的设置冲突。

$sudo cat /proc/interrupts
           CPU0       CPU1       
  0:         48          0   IO-APIC-edge      timer
  1:         54          0   IO-APIC-edge      i8042
  8:          1          0   IO-APIC-edge      rtc0
  9:          0          0   IO-APIC-fasteoi   acpi
 12:         35        116   IO-APIC-edge      i8042
 14:          0          0   IO-APIC-edge      ata_piix
 15:          0          0   IO-APIC-edge      ata_piix
 16:        118       2513   IO-APIC-fasteoi   vmwgfx
 24:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 25:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 26:          0          0   PCI-MSI-edge      PCIe PME, pciehp
 27:          0          0   PCI-MSI-edge      PCIe PME, pciehp
NMI:          0          0   Non-maskable interrupts
LOC:   35392807   14792833   Local timer interrupts
SPU:          0          0   Spurious interrupts
PMI:          0          0   Performance monitoring interrupts
IWI:    2677624     215297   IRQ work interrupts
...

第一列指的是IRQ号码。
下一列报告中断类型,最后一列包含位于IRQ的设备的名称。

9.报告网络统计

为了获取网络统计数据的报告,使用具有"-n""选项的SAR命令。
例如:

$sar -n DEV
Linux 3.10.0-1127.10.1.el7.x86_64 (localhost.localdomain) 	10/06/2017 	_x86_64_	(2 CPU)
19:20:23        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
19:20:24       ens192     11,00      4,00      1,80      2,75      0,00      0,00      0,00
19:20:24           lo     79,00     79,00     43,62     43,62      0,00      0,00      0,00
Average:        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
Average:       ens192     11,00      4,00      1,80      2,75      0,00      0,00      0,00
Average:           lo     79,00     79,00     43,62     43,62      0,00      0,00      0,00

其中:

DEV:报告了网络设备的统计信息

iFace:接口的名称(在上面的示例中:ENS192)

rxpck/s/txpck/s:每秒接收/传输的数据包总数

还有一些其他选项比dev,例如:

NFS:显示NFS客户活动

袜子:表示使用的插座

TCP:表示TCP V4网络流量

UDP:表示UDP V4网络流量

如果我们想收集特定一天的网络统计信息,请按照09年6月29日,我们需要按如下方式运行:

$sar -n DEV -f /var/log/sa/sa09

SAR图形

上面的部分解释了使用SAR从终端使用SAR的方法。
KSAR是一个基于Java的GUI应用程序,可视化SAR数据。

安装KSAR:

$sudo apt install openjdk-11-jdk
$sudo yum install epel-release
$sudo yum install java-openjdk

下载ksar和解压缩它:

$wget https://sourceforge.net/projects/ksar/files/latest/download
$mv download kSar.zip
$unzip kSar.zip

现在cd变成了dir

$cd kSar-*

现在使RUN.SH文件可执行,并以root身份运行它。

$chmod +x run.sh
$sudo su
./run.sh

现在我们可以通过运行local命令来测试。
我们转到data>运行local命令s,我们可以使用默认命令。

接下来,我们可以通过单击左侧面板查看图表,并在右侧查看显示的图形:

也可以从文件加载图形。
首先,我们需要运行SAR:

LC_ALL=C sar -A > /tmp/sar.data.txt

然后在菜单中,我们从文本文件中选择"数据">"加载",并在"/TMP"或者"我们已保存的位置"中找到该文件。