Linux中的SAR命令
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命令追加-o
fileName。
例如:
$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"或者"我们已保存的位置"中找到该文件。