sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,
包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等
IPC(Inter-Process Communication)进程间通信,提供了各种进程间通信的方法。在Linux C编程中有几种方法 (1) 半双工Unix管道(2) FIFOs(命名管道)
(3) 消息队列
(4) 信号量
(5) 共享内存
(6) 网络Socket
sar [options] [-A] [-o file] t [n]
t为采样间隔,n为采样次数,默认值是1; -o file表示将命令结果以二进制格式存放在文件中,file 是文件名。 常用选项如下: -A:所有报告的总和 -r:输出内存和交换空间的统计信息 -u:输出CPU使用情况的统计信息 -c:输出进程统计信息,每秒创建的进程数 -R:输出内存页面的统计信息 -v:输出inode、文件和其他内核表的统计信息 -d:输出每一个块设备的活动信息 -b:显示I/O和传送速率的统计信息 -a:文件读写情况 -y:终端设备活动情况 -w:输出系统交换活动信息
注意:-o 文件名,可以将显示的数据放在文件里
可以使用sar -f 文件名 查看
CPU
[root@VM_0_10_centos ~]# sar -u 5 3 Linux 2.6.32-696.el6.x86_64 (VM_0_10_centos) 05/15/2020 _x86_64_ (1 CPU) 10:38:38 PM CPU %user %nice %system %iowait %steal %idle 10:38:43 PM all 0.60 0.00 0.40 0.00 0.00 99.00 10:38:48 PM all 0.60 0.00 0.20 0.00 0.00 99.20 10:38:53 PM all 0.60 0.00 0.40 0.20 0.00 98.80 Average: all 0.60 0.00 0.33 0.07 0.00 99.00
每个5秒测一测 all 表示统计信息为所有 CPU 的平均值。(多个cpu的情况下) %user:显示在用户级别(application)运行使用 CPU 总时间的百分比。 %nice:显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。 %system:在核心级别(kernel)运行所使用 CPU 总时间的百分比。 %iowait:显示用于等待I/O操作占用 CPU 总时间的百分比。 %steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。 %idle:显示 CPU 空闲时间占用 CPU 总时间的百分比。 注意性能: %iowait 的值过高,表示硬盘存在I/O瓶颈 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量 %idle 的值持续低于1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU 。
内存
[root@VM_0_10_centos ~]# sar -r 5 3 Linux 2.6.32-696.el6.x86_64 (VM_0_10_centos) 05/15/2020 _x86_64_ (1 CPU) 10:46:17 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit 10:46:22 PM 87556 1834692 95.45 72188 325300 1941736 101.01 10:46:27 PM 90116 1832132 95.31 72196 325296 1934324 100.63 10:46:32 PM 90100 1832148 95.31 72196 325300 1934328 100.63 Average: 89257 1832991 95.36 72193 325299 1936796 100.76
kbmemfree:它不包括buffer和cache的空间.和free命令的free一样 kbmemused:它包括buffer和cache的空间. %memused:kbmemused/内存总量(不包括swap) kbbuffers和kbcached:是free命令中的buffer和cache. kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap). %commit:这个值是kbcommit与内存总量(包括swap)的一个百分比.
I/O
[root@VM_0_10_centos ~]# sar -b 5 3 Linux 2.6.32-696.el6.x86_64 (VM_0_10_centos) 05/15/2020 _x86_64_ (1 CPU) 10:50:12 PM tps rtps wtps bread/s bwrtn/s 10:50:17 PM 2.21 0.00 2.21 0.00 41.77 10:50:22 PM 1.80 0.00 1.80 0.00 35.20 10:50:27 PM 4.62 0.00 4.62 0.00 54.62 Average: 2.87 0.00 2.87 0.00 43.85
tps:每秒钟物理设备的 I/O 传输总量 rtps:每秒钟从物理设备读入的数据总量 wtps:每秒钟向物理设备写入的数据总量 bread/s:每秒钟从物理设备读入的数据量,单位为 块/s bwrtn/s:每秒钟向物理设备写入的数据量,单位为 块/s
inode ,file,其他内核
[root@VM_0_10_centos ~]# sar -v 5 3 Linux 2.6.32-696.el6.x86_64 (VM_0_10_centos) 05/15/2020 _x86_64_ (1 CPU) 10:52:17 PM dentunusd file-nr inode-nr pty-nr 10:52:22 PM 6552 928 9491 1 10:52:27 PM 6524 832 9445 1 10:52:32 PM 6524 832 9445 1 Average: 6533 864 9460 1
dentunusd:目录高速缓存中未被使用的条目数量 file-nr:文件句柄(file handle)的使用数量 inode-nr:索引节点句柄(inode handle)的使用数量 pty-nr:使用的pty数量,这就是虚拟终端pty(pseudo-tty)
进程队列长度和平均负载
[root@VM_0_10_centos ~]# sar -q 5 3 Linux 2.6.32-696.el6.x86_64 (VM_0_10_centos) 05/16/2020 _x86_64_ (1 CPU) 10:38:39 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 10:38:44 AM 0 154 0.00 0.00 0.00 10:38:49 AM 0 151 0.00 0.00 0.00 10:38:54 AM 0 152 0.00 0.00 0.00 Average: 0 152 0.00 0.00 0.00
runq-sz:运行队列的长度(等待运行的进程数) plist-sz:进程列表中进程(processes)和线程(threads)的数量 ldavg-1:最后1分钟的系统平均负载(System load average) ldavg-5:过去5分钟的系统平均负载 ldavg-15:过去15分钟的系统平均负载