• linux包之sysstat之sar命令


    [root@ka1che225 sa]# rpm -ql sysstat
    /etc/cron.d/sysstat
    /etc/sysconfig/sysstat
    /etc/sysconfig/sysstat.ioconf
    /usr/bin/cifsiostat
    /usr/bin/iostat
    /usr/bin/mpstat
    /usr/bin/nfsiostat-sysstat
    /usr/bin/pidstat
    /usr/bin/sadf
    /usr/bin/sar
    /usr/bin/tapestat
    /usr/lib/systemd/system/sysstat.service
    /usr/lib64/sa
    /usr/lib64/sa/sa1
    /usr/lib64/sa/sa2
    /usr/lib64/sa/sadc
    /usr/share/doc/sysstat-10.1.5
    /var/log/sa

    要启动SAR,必须通过cron工具以周期性的间隔启动。
    安装sysstat包后,默认创建一个/etc/cron.d/sysstat文件,其默认内容为:
    # run system activity accounting tool every 10 minutes
    */10 * * * * root /usr/lib/sa/sa1 1 1
    # generate a daily summary of process accounting at 23:53
    53 23 * * * root /usr/lib/sa/sa2 -A
    这里用到了两个命令
    /usr/lib/sa/sa1
    /usr/lib/sa/sa2
    sa1:是调用sadc(二进制文件),将数据收集到二进制日志文件的一个Shell脚本。sa1命令还确保每天使用不同的文件。每隔十分钟运行一次该命令,最好不要改这个值,这是对一般系统折中的值。二进制日志文件存放在/var/log/sa/目录下,命名为sa${DATE}。
    sa2:是将当日二进制日志文件中所有的数据转储到文本文件(sar)的另一个Shell脚本,然后它将清除七天之前的所有日志文件。参数-A指定了从二进制文件中提取哪些数据转储到文本文件中。转储的文件存放在/var/log/sa/目录下,命名为sar${DATE}。
    这两个命令要配合着使用。
    (强烈建议看一下这两个命令的脚本)

    查看一下/usr/lib/sa/sa1脚本,里面执行这样一句命令:
    /usr/lib/sa/sadc -F -L 1 1 -
    -F:强制指定一个储存文件,如果文件已存在,就将其转换成sa的二进制文件形式。
    -L:给sa文件加互斥锁,不能让两个sadc进程同时写一个sa文件。
    根据sa1脚本中的命令,我们也可以手动的创建sa二进制文件,使用/usr/lib/sa/sadc命令,
    # /usr/lib/sa/sadc 1 10 /tmp/jaylin_sa
    上述命令的作用是:每隔1s写一条记录,写10条,存放到二进制文件/tmp/jaylin_sa中。

    查看一下/usr/lib/sa/sa2脚本,里面执行这样一句命令:
    /usr/bin/sar -A -f /var/log/sa/sa${DATE} > /var/log/sa/sar${DATE}
    -A:列出所有存储在/var/log/sa/sa${DATE}里的统计信息。
    -f:指定将要转储的sa文件,默认的参数值为/var/log/sa/sa${DATE}。
    根据sa2脚本中的命令,我们也可以手动将sa文件(二进制)转储到sar文件(ASCII文本)中,使用/usr/bin/sar命令,
    # /usr/bin/sar -A -f /tmp/jaylin_sa> /tmp/jaylin_sar
    我们可以通过cat等命令查看sar文件的内容。但是我们也可以通过sar命令读取sa的二进制文件。
    # sar
    03:00:01 PM     CPU     %user     %nice   %system   %iowait    %steal    %idle
    03:10:01 PM       all      1.02      0.00      2.33      0.39      0.00     96.25
    03:20:01 PM       all      1.85      0.00      3.29      0.32      0.00     94.54
    03:30:02 PM       all      1.63      0.06      3.81      2.05      0.00     92.45
    03:40:02 PM       all      9.31      0.00      8.10      3.39      0.00     79.20
    03:50:01 PM       all      8.64      0.00      7.73      2.27      0.00     81.36
    04:00:01 PM       all      0.84      0.00      2.12      1.81      0.00     95.23
    Average:          all      3.88      0.01      4.56      1.71      0.00     89.84

    其中:
    %user:CPU花费在用户进程(如应用程序、Shell脚本或该用户进行的交互)上的时间的百分比。
    %nice:CPU用来执行有用户级别优先级别的任务的时间的百分比。
    %system:CPU用来执行核心任务的时间的百分比。
    %iowait:CPU等待块设备输入或输出的时间的百分比。
    %steal:CPU等待管理程序(hypervisor)处理其他任务的时间的百分比。
    %idle:CPU未进行任何有用操作的时间的百分比。
    最后一行是所有数据的平均值。然而,因为大多数系统都会在忙时间段后经历空闲时间段,所以平均值并不能反映完整的情况。
    其他度量参数:
    -b:显示了缓冲区信息和使用缓冲区与必须写磁盘的比率。
    -c:显示了系统调用分解为一些常用的调用,如fork()、exec()、read()和write()。高进程 创建会导致较差的性能,并且这是可能需要将一些应用程序转移到其他计算机的信号。
    -p 和 -w:显示了分页(交换)活动。高分页操作是内存缺乏的信号。特别地,-w 选项 显示了进程切换的次数:高的数值表示计算机上运行的内容过多,该计算机在切换任务 上花费了比实际工作更多的时间。
    -q:显示了运行队列的大小,它与当时的平均负载相同。
    -r:显示了一段时间的可用内存和交换空间。
    它们显示每一列的含义请查看sar的man page。
    我们也可以查看指定的某一时间段内的记录
    -f:指定要读取的sa文件。
    -s:开始的时间。注意,-s不是包含性的,所以必须从所选择的开始时间减去十分钟。
    -e:结束的时间。
    例如:
    # # sar -f /var/log/sa/sa12 -s 14:50:00 -e 15:30:00
    03:00:01 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
    03:10:01 PM       all      1.02      0.00      2.33      0.39      0.00     96.25
    03:20:01 PM       all      1.85      0.00      3.29      0.32      0.00     94.54
    Average:          all      1.44      0.00      2.81      0.36      0.00     95.40
    上述命令查看本月12日,15:00—15:30之间的记录。

    下面介绍一个第三方工具Ksar
    这个工具可以将sar文件装换成图形,便于查看内存等数据的变化情况。
    将下载的kSar-5.0.6.zip解压,解压后生成的目录下,有一个run.sh脚本。给其增加可执行权限。执行脚本,会出现一个图形界面:
    将存在的sar文件导入工具,就可以看到根据sar文件记录生成的图形。
    注意,如果是手动将sa文件转储到sar文件中,执行sar命令时要加LANG=C,即:
    # LANG=C /usr/bin/sar -A -f /tmp/jaylin_sa> /tmp/jaylin_sar
    不加LANG=C,sar文件显示的时间为12小时制;加LANG=C之后,sar文件显示的时间为24小时制。Ksar工具只能识别24小时制的sar文件,所以切记执行转储时要加此环境变量。

    iostat 是用来显示比如CPU使用率,硬盘设备的吞吐率;

    mpstat 提供多处理器系统中的CPU的利用率的统计;

    sar命令很强大,是分析系统性能的重要工具之一,通过sar命令,可以全面获取系统的cpu、运行队列、磁盘、分页、内存、cpu中断、网络等性能数据。
    由于默认不安装sar,需要安装sysstat包来安装sar 、iostat等命令行。

    sar 既能报告当前数据,也能报告历史数据,不带选项执行会以10分钟为间隔报告自午夜起当天的CPU利用率。sar 适用于快速粗略了解历史信息
    sa1 - Collect and store binary data in the system activity daily data file
    sa2 - Write a daily report in the /var/log/sa directory.
    sadc - System activity data collector.
    sadf - Display data collected by sar in multiple formats.
    sar - Collect, report, or save system activity information.

    * iostat 工具提供CPU使用率及硬盘吞吐效率的数据;
    * mpstat 工具提供单个处理器或多个处理器相关数据;
    * sar 工具负责收集、报告并存储系统活跃的信息;
    * sa1 工具负责收集并存储每天系统动态信息到一个二进制的文件中。它是通过计划任务工具cron来运行,是为sadc所设计的程序前端程序;
    * sa2 工具负责把每天的系统活跃性息写入总结性的报告中。它是为sar所设计的前端 ,要通过cron来调用
    * sadc 是系统动态数据收集工具,收集的数据被写一个二进制的文件中,它被用作sar工具的后端;
    * sadf 显示被sar通过多种格式收集的数据;

    sar是通过fscanf下面这些文件来得到输出数据的

    /* Files */
    #define PROC "/proc"
    #define PSTAT "stat"
    #define MEMINFO "/proc/meminfo"
    #define PID_STAT "/proc/%ld/stat"
    #define SERIAL "/proc/tty/driver/serial"
    #define FDENTRY_STATE "/proc/sys/fs/dentry-state"
    #define FFILE_NR "/proc/sys/fs/file-nr"
    #define FINODE_STATE "/proc/sys/fs/inode-state"
    #define FDQUOT_NR "/proc/sys/fs/dquot-nr"
    #define FDQUOT_MAX "/proc/sys/fs/dquot-max"
    #define FSUPER_NR "/proc/sys/fs/super-nr"
    #define FSUPER_MAX "/proc/sys/fs/super-max"
    #define FRTSIG_NR "/proc/sys/kernel/rtsig-nr"
    #define FRTSIG_MAX "/proc/sys/kernel/rtsig-max"
    #define NET_DEV "/proc/net/dev"
    #define NET_SOCKSTAT "/proc/net/sockstat"
    #define SADC "sadc"
    #define SADC_PATH "/usr/lib/sa/sadc"
    #define SADC_LOCAL_PATH "/usr/local/lib/sa/sadc"
    #define LOADAVG "/proc/loadavg"

    sar -u 3 5 查看系统第一个cpu的整体负载情况。
    sar -P 1 3 5 查看系统第二个cpu的整体负载情况。
    sar -d 3 5 查看系统磁盘的读写情况。
    sar -r 5 2 产看系统内存使用情况
    sar -n DEV 5 3 查看系统网络运行状态。DEV 显示网络接口信息。EDEV显示网络错误的统计数据。SOCK显示套接子信息,ALL显示前三参数的所有信息。

    [root@rac01 ~]# sar -r 2 3
    [root@rac01 ~]# sar -d 2 3
    [root@com1 /]# sar -h
    [root@com1 /]# sar ---help 这两个帮助是不一样的

    [root@coreserv ~]# sar -d 1 10 查看磁盘
    [root@coreserv ~]# sar -u 2 5 查看cpu
    [root@Firewall sa]# sar -r -n DEV -f /var/log/sa/sa16

    sar收集的数据同样能被保存在用-o参数指定的文件中,并且也会被输出到屏幕上,如果-o没有文件名,sar使用标准的日报文件/var/log/sa/sadd,dd为当天,默认从内核中得到的所有数据都被保存到data file中,除了中断与disk data,sar(后台为sadc)

    这个文件要么是一个由-f指定的文件,要么是默认的标准系统活动日报

    sysstat 9.0.4版本下,这个版本不加count的话,持续输出屏幕,老版本的需要将count置0,才持续输出。

    [root@ipt sa]# sar -o 1   持续输出到屏幕与文件中,文件在/var/log/sa/sadd,dd为日期

    [root@ipt sa]# sar -n DEV 1 0        当count次数为0时持续输出

    如果您想得到Sysstat工具集所收集的系统信息自动存为某个文件中,你必须通过cron 为 sa1 和sa2 做计划任务。我们可以通过修改用户的crontab。在默认的情况下,Sysstat历史信息将被存放在/var/log/sa文件中。

    # 8am-7pm activity reports every 10 minutes during weekdays
    0 8-18 * * 1-5 /usr/lib/sa/sa1 600 6 &
    # 7pm-8am activity reports every hour during weekdays
    0 19-7 * * 1-5 /usr/lib/sa/sa1 &
    # Activity reports every hour on Saturday and Sunday
    0 * * * 0,6 /usr/lib/sa/sa1 &
    # Daily summary prepared at 19:05
    5 19 * * * /usr/lib/sa/sa2 -A &

    有了Sysstat的守护进程,这样我们开机后,Sysstat的守护进程,就时时刻刻的为我们服务了。sa 、sa1或sa2自动把信息存在 /var/log/sa目录的二进制文件中,我们可以通过sar工具来提取这些系统信息的历史;
    当然我们也可以通过手动的方法来打开Sysstat的守护程序,也就是我们前面所制作的sysstat;
    [root@localhost ~]# /etc/rc.d/init.d/sysstat start
    下面的方法也行;
    [root@localhost ~]# /usr/lib/sa/sa1
    [root@localhost ~]# /usr/lib/sa/sa2

    sadc

    sadc 位于 /usr/lib/sa目录中,如果你没有设置可执行路径,要用绝对路径来运行比较方便 ,/usr/lib/sa/sadc;
    sadc 是把数据写在一个二进制的文件中,如果想查看数据内容,需要用sadf工具来显示;    如果不指定文件名,默认是屏幕。
    [root@ipt sa]# /usr/lib64/sa/sadc 1 10 sadc00        每秒收集共10次,写入到sadc00文件
    [root@ipt sa]# sar -f sadc00                两条命令都可以查看sadc00文件的数据,但sadf不太直观
    [root@ipt sa]# sadf sadc00

    sar
    sar 工具比较强大,既能收集系统CPU、硬盘、动态数据,也能显示动态显示,更能查看二进制数据文件;sar 的应用比较多,而且也比较复杂,数据更为精确。我们只了解一下常用的内容就行,大多数内容我们了解就行;
    -A 显示所有历史数据,通过读取/var/log/sar 目录下的所有文件,并把它们分门别类的显示出来;
    -b 通过设备的I/O中断读取设置的吞吐率;
    -B 报告内存或虚拟内存交换统计;
    -c 报告每秒创建的进程数;
    -d 报告物理块设备(存储设备)的写入、读取之类的信息,如果直观一点,可以和p参数共同使用,-dp
    -f 从一个二进制的数据文件中读取内容,比如 sar -f filename
    -i interval 指定数据收集的时间,时间单位是秒;
    -n 分析网络设备状态的统计,后面可以接的参数有 DEV、EDEV、NFS、NFSD、SOCK等。比如-n DEV
    -o 把统计信息写入一个文件,比如 -o filename ;
    -P 报告每个处理器应用统计,用于多处理器机器,并且启用SMP内核才有效;
    -p 显示友好设备名字,以方便查看,也可以和-d 和-n 参数结合使用,比如 -dp 或-np
    -r 内存和交换区占用统计;
    -R
    -t 这个选项对从文件读取数据有用,如果没有这个参数,会以本地时间为标准 读出;
    -u 报告CPU利用率的参数;
    -v 报告inode, 文件或其它内核表的资源占用信息;
    -w 报告系统交换活动的信息; 每少交换数据的个数;
    -W 报告系统交换活动吞吐信息;
    -x 用于监视进程的,在其后要指定进程的PID值;
    -X 用于监视进程的,但指定的应该是一个子进程ID;

    如果只用sar 命令,sar就是读取 /var/log/sa目录下最近系统状态文件。
    [root@localhost ~]# sar
    [root@localhost ~]# sar -A 注:读取/var/log/sa目录下所有文件数据;

    查cpu
    如果我们想知道CPU的利用率;动态更新;下面的例子是每秒更新一次数据,总共更新五次;
    [root@localhost ~]# sar -u  1 5
    您可以将CPU利用率的动态信息输出到一个文本文件中,然后通过more 来查看。
    [root@localhost ~]# sar -u 1 5 > sar000.txt
    [root@localhost ~]# more sar000.txt
    也可以输出到一个二进制的文件中,然后通过sar来查看;
    [root@localhost ~]# sar -u 1 5 -o sar002
    [root@localhost ~]# sar -f sar002

    查网络
    [root@localhost ~]# sar -n DEV 2 5
    [root@localhost ~]# sar -n DEV 2 5 |grep eth0
    如果想知道网络设备错误报告,也就就是用来查看设备故障的。应该用EDEV;比如下面的例子;
    [root@localhost ~]# sar -n EDEV 2 5

  • 相关阅读:
    Basic GC Tuning
    程序员如何少走弯路,更好的提升技术。
    WPF 多线程
    IOC
    一句话概括WPF知识点
    WPF数据绑定 Binding
    WPF命令
    WPF依赖属性
    WPF路由事件
    WPF绘图和动画
  • 原文地址:https://www.cnblogs.com/createyuan/p/3728345.html
Copyright © 2020-2023  润新知