概况
????????sar是老牌和著名的命令行工具之一,经常被忽视。 当遇到性能瓶颈时,它提供了丰富的信息。 它本身只提供冗长的数字数据列,很难解释。 sar存在于大多数Linux发行版上,例如Ubuntu,Debian,CentOS,Gentoo,也可在Solaris,AIX和其他商业Unices上使用。
????????ksar是用于sar数值数据的基于Java的前端。 它生成可以导出为.pdf和其他格式的友好图形。
SAR
????????sar(System Activity Reporter,系统活动情况报告)是Linux下系统运行状态统计工具,可从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等。算是一个万能的小能手。
sar是sysstat中的一个工具之一,sysstat里面包含了很多工具,可以对系统进行详细的统计。
sysstat 包
????????sysstat 包含sar、sa1、和 sa2 命令,是 Linux 包含的性能监视工具集合。
- sar :? ?显示数据
- sa1:是调用sadc(二进制文件),将数据收集到二进制日志文件的一个Shell脚本。它调用 sadc 去记录报告到 /var/log/sa/sadX 格式。
? ? ? ? ? ? ? ? sa1命令还确保每天使用不同的文件。每隔十分钟运行一次该命令,最好不要改这个值,这是对一般系统折中的值。
????????????????二进制日志文件存放在/var/log/sa/目录下,命名为sa${DATE}。
- sa2:是将当日二进制日志文件中所有的数据转储到文本文件(sar)的另一个Shell脚本,然后它将清除七天之前的所有日志文件。它调用 sar 去记录报告到 /var/log/sa/sarX 格式。
????????????????参数-A指定了从二进制文件中提取哪些数据转储到文本文件中。
????????????????转储的文件存放在/var/log/sa/目录下,命名为sar${DATE}。
安装sysstat
yum install sysstat? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -----centos7
sudo apt install sysstat? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ------ubuntu
github参考
配置文件
? ? ? ? 配置文件所在目录:
/etc/sysconfig/sysstat
1 # sysstat-10.1.5 configuration file.
2
3 # How long to keep log files (in days).
4 # If value is greater than 28, then log files are kept in
5 # multiple directories, one for each month.
6 HISTORY=28
7
8 # Compress (using gzip or bzip2) sa and sar files older than (in days):
9 COMPRESSAFTER=31
10
11 # Parameters for the system activity data collector (see sadc manual page)
12 # which are used for the generation of log files.
13 SADC_OPTIONS="-S DISK"
14
15 # Compression program to use.
16 ZIP="bzip2"
定时任务文件
? ? ? ? 定时任务文件所在:
/etc/cron.d/sysstat
[root@localhost hhd]# cat /etc/cron.d/sysstat
# Run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib64/sa/sa1 1 1
# 0 * * * * root /usr/lib64/sa/sa1 600 6 &
# Generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2 -A
设置为开机启动
systemctl enable sysstat? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -----开机启动 systemctl start sysstat.service? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-----开启服务 systemctl status sysstat.service? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-----查看状态
状态信息示例:
[root@localhost hhd]# systemctl status sysstat.service
● sysstat.service - Resets System Activity Logs
Loaded: loaded (/usr/lib/systemd/system/sysstat.service; enabled; vendor preset: enabled)
Active: active (exited) since Mon 2022-06-20 09:48:00 CST; 1 day 4h ago
Main PID: 968 (code=exited, status=0/SUCCESS)
CGroup: /system.slice/sysstat.service
Jun 20 09:48:00 localhost.localdomain systemd[1]: Starting Resets System Activity Logs...
Jun 20 09:48:00 localhost.localdomain systemd[1]: Started Resets System Activity Logs.
sar命令详解
?
Usage: sar [ options ] [ <interval> [ <count> ] ]
Options are:
[ -A ] [ -B ] [ -b ] [ -C ] [ -d ] [ -H ] [ -h ] [ -p ] [ -q ] [ -R ]
[ -r ] [ -S ] [ -t ] [ -u [ ALL ] ] [ -V ] [ -v ] [ -W ] [ -w ] [ -y ]
[ -I { <int> [,...] | SUM | ALL | XALL } ] [ -P { <cpu> [,...] | ALL } ]
[ -m { <keyword> [,...] | ALL } ] [ -n { <keyword> [,...] | ALL } ]
[ -j { ID | LABEL | PATH | UUID | ... } ]
[ -f [ <filename> ] | -o [ <filename> ] | -[0-9]+ ]
[ -i <interval> ] [ -s [ <hh:mm:ss> ] ] [ -e [ <hh:mm:ss> ] ]
-A:所有报告的总和
-u:输出CPU使用情况的统计信息
-v:输出inode、文件和其他内核表的统计信息
-d:输出每一个块设备的活动信息,类似iostat
-r:输出内存和交换空间的统计信息
-b:显示I/O和传送速率的统计信息
-B:显示内存与“磁盘或SWAP空间”交换情况,监控分页情况
-a:文件读写情况
-c:输出进程统计信息,每秒创建的进程数
-R:输出内存页面的统计信息
-y:终端设备活动情况
-w:输出每秒上下文切换数
-W:输出系统交换活动信息
下面列举几个例子
获取cpu信息
????????使用 sar 命令去显示操作系统中选定的累积活动计数器输出。在这个示例中,运行 sar 命令行,去实时获得 CPU 使用率的报告:
其中:
[root@localhost hhd]# sar -u 3 10
Linux 3.10.0-1127.19.1.rt56.1116.el7.x86_64 (localhost.localdomain) 06/21/2022 _x86_64_ (14 CPU)
02:29:35 PM CPU %user %nice %system %iowait %steal %idle
02:29:38 PM all 13.22 0.00 13.88 0.00 0.00 72.90
02:29:41 PM all 13.14 0.00 13.90 0.00 0.00 72.96
02:29:44 PM all 13.24 0.00 13.89 0.00 0.00 72.86
02:29:47 PM all 13.24 0.00 13.90 0.00 0.00 72.86
02:29:50 PM all 13.26 0.00 13.89 0.00 0.00 72.85
02:29:53 PM all 13.27 0.00 13.87 0.00 0.00 72.86
02:29:56 PM all 13.24 0.00 13.94 0.00 0.00 72.82
02:29:59 PM all 13.22 0.00 13.92 0.00 0.00 72.86
02:30:02 PM all 13.65 0.00 14.30 0.00 0.00 72.06
02:30:05 PM all 13.24 0.00 13.92 0.00 0.00 72.85
Average: all 13.27 0.00 13.94 0.00 0.00 72.79
查看 I/O 和传输率统计数据
[root@localhost hhd]# sar -b 3 10
Linux 3.10.0-1127.19.1.rt56.1116.el7.x86_64 (localhost.localdomain) 06/21/2022 _x86_64_ (14 CPU)
02:33:05 PM tps rtps wtps bread/s bwrtn/s
02:33:08 PM 0.67 0.00 0.67 0.00 10.67
02:33:11 PM 0.00 0.00 0.00 0.00 0.00
02:33:14 PM 0.00 0.00 0.00 0.00 0.00
02:33:17 PM 2.00 0.00 2.00 0.00 21.33
02:33:20 PM 0.00 0.00 0.00 0.00 0.00
02:33:23 PM 1.00 0.00 1.00 0.00 16.00
02:33:26 PM 2.33 0.00 2.33 0.00 32.00
02:33:29 PM 0.00 0.00 0.00 0.00 0.00
02:33:32 PM 1.00 0.00 1.00 0.00 8.00
02:33:35 PM 0.00 0.00 0.00 0.00 0.00
Average: 0.70 0.00 0.70 0.00 8.80
生成服务器所有数据
kSar 介绍
????????sar 和 sadf 提供了基于命令行界面的输出。这种输出可能会使新手用户/系统管理员感到无从下手。
????????因此,你需要使用 kSar,它是一个图形化显示你的 sar 数据的 Java 应用程序。它也允许你以 PDF/JPG/PNG/CSV 格式导出数据。你可以用三种方式去加载数据:本地文件、运行本地命令、以及通过 SSH 远程运行的命令。
????????如果你的Linux系统是可以安装图形界面的话,可以在该机上安装该工具,否则,建议在windows电脑上安装该工具。
????????使用ksar的前提是该机安装了java,如果没安装,请自行安装。
安装
? ? ?kSar链接:
????????github链接
? ? ?java链接(windows):
? ? ??? jdk下载链接
? ? ?windows安装jdk参考
启动ksar
? ?java -jar ksar-5.2.4-b396_gf0680721-SNAPSHOT-all.jar
启动后欢迎界面:
主窗口:
三种加载数据方式:
使用 kSar 去生成 sar 图表
? ? ? ? ?sar直接生成过sa<xx>的文件,无法直接为ksar所用,要想生成可用的数据,我们需要导出sar为txt。
其中
?-A 表示导出所有数据,包括CPU、内存、IO、网络等等所有数据
LC_ALL=C sar -A > /tmp/sar.IP.202XXXXX.data.txt
然后拷贝到ksar所在设备。
数据文件的其他操作
1、将多个日期的整合为一个
????????如果我们要查看指定时间间隔的数据。
ls -tr /var/log/sysstat/sa[0-9][0-9] | while read safile ; do LC_TIME=en_UK.utf8 sar -r -f "$safile" ;done | sudo tee "$(date +'%Y-%m-%d')"_"$(hostname -I)_"
ls -tr /var/log/sysstat/sa202[1-9][0-1][0-9][0-3][0-9] | while read safile ; do LC_TIME=en_UK.utf8 sar -r -f "$safile" ;done | sudo tee "$(date +'%Y-%m-%d')"_"$(hostname -I)_"
其中?
- sa[0-9][0-9]表示?sa00至sa99所有文件
- ?LC_TIME=en_UK.utf8意思是以24小时格式输出,没有它将会存在PM/AM
? ??
? ? ? ? 也可通过find 和grep找到相关文件
? ? ? ?例如:找到最近28天内的数据并整合为一个文件
ls -tr $(find -type f -mtime -28) | grep -E 'sa[0-9]{8}$' | while read safile ; do LC_TIME=en_UK.utf8 sar -r -f "$safile" ;done | sudo tee "$(date +'%Y-%m-%d')"_"$(hostname -I)_"
其中?
- ls -tr $(find -type f -mtime -28) | grep -E 'sa[0-9]{8}$', 是查询最近28天内的所有文件,例如今天是2022年3月28日,那么将会查询sa20220228 至20220328的文件
- find -mtime -n ?代表查询今天往前减n天(包含n天前)后所有的文件,
????????例如:今天日期为2022年3月28日,n为1,则查询2022年3月27日后创建(包含27日)的到当前时间的所有文件;find -mtime n 代表查询今天往前n+1天当天的所有文件,如上条件,则查询2022年3月26日当天的所有文件;find -mtime +n代表今天往前n+1天前的所有文件(不包含n+1天),如山条件,则查询2022年3月26前(不包含26日)之前日期的所有文件。
- grep -E regex 是grep的延伸型正規表示法
?
????????经过上面的步骤,会生成一个‘日期_IP_‘格式的文件,将改文件传输到本地,后面可以放到本地电脑的软件中生成图形样式
导入数据
????????点击 “Data” > “Load from a file” > 从 /tmp/ 中选择 sar.data.txt > 点击 “Open” 按钮。
cpu0的示例数据
- 若 %iowait 的值过高,表示硬盘存在I/O瓶颈
- 若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量
- 若 %idle 的值持续低于 10,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU。
了解 kSar 图像和 sar 数据
????????强烈建议你去阅读 sar 和 sadf 命令的 man 页面。
$ man sar
$ man sadf
?
|