Solaris性能监控工具

2 全局性能监控工具
2.1 sysperfstat
sysperfstat是一款用perl编写的显示系统CPU、MEM、DISK、NET四项指标的利用率和饱和度的全局性能监控工具,由Solaris资深咨询师Brendan Gregg开发并推广,是业内较为权威的一款性能监控工具,该工具堪称经典且应用广泛。
 用法:    sysperfstat [-h] | [interval [count]]
    例如,
           sysperfstat                 # 打印系统自启动后的概要信息
           sysperfstat 5               # 每5秒不间断打印
           sysperfstat 1 5             # 每1秒打印,共5次
           sysperfstat -h              # 打印帮助
 在这里,我们介绍CPU负载示范,
$ sysperfstat 1
             ------ Utilisation ------     ------ Saturation ------
     Time    %CPU   %Mem  %Disk   %Net     CPU    Mem   Disk    Net
 22:57:22    0.85  44.11   2.40   0.19    0.01   0.00   0.00   0.00
 22:57:23    2.00  77.77   0.00   0.00    0.00   0.00   0.00   0.00
 22:57:24    3.00  77.77   0.00   0.00    0.00   0.00   0.00   0.00
 22:57:25    3.00  77.77   0.00   0.00    0.00   0.00   0.00   0.00
 22:57:26   17.00  77.77   0.00   0.00    0.00   0.00   0.00   0.00
 22:57:27   38.00  77.79   0.00   0.00    0.00   0.00   0.00   0.00
 22:57:28  100.00  77.85   0.00   0.00    0.00   0.00   0.00   0.00
 22:57:29  100.00  77.89   0.00   0.00    1.00   0.00   0.00   0.00
 22:57:30  100.00  77.84   0.00   0.00    2.00   0.00   0.00   0.00
 22:57:31  100.00  77.80   0.00   0.00    3.00   0.00   0.00   0.00
 22:57:32  100.00  77.80   0.00   0.00    3.00   0.00   0.00   0.00
 22:57:33  100.00  77.80   0.00   0.00    3.00   0.00   0.00   0.00
 22:57:34  100.00  77.80   0.00   0.00    3.00   0.00   0.00   0.00
 22:57:35  100.00  77.84   0.00   0.00    2.00   0.00   0.00   0.00
 22:57:36  100.00  77.84   0.00   0.00    2.00   0.00   0.00   0.00
 22:57:37  100.00  77.84   0.00   0.00    2.00   0.00   0.00   0.00
 22:57:38  100.00  77.84   0.00   0.00    2.00   0.00   0.00   0.00
 22:57:39  100.00  77.84   0.00   0.00    2.00   0.00   0.00   0.00
 22:57:40   33.00  77.77   0.00   0.00    0.00   0.00   0.00   0.00
 22:57:41   19.00  77.77   0.00   0.00    0.00   0.00   0.00   0.00
 22:57:42    2.00  77.77   0.00   0.00    0.00   0.00   0.00   0.00
 第一行打印的是系统自启动后的概要信息,我们可以看到CPU使用率很快达到100%,而随着越来越多的程序执行使CPU的饱和度稳步增长。

以下是内存负载示范,
$ sysperfstat 1
             ------ Utilisation ------     ------ Saturation ------
     Time    %CPU   %Mem  %Disk   %Net     CPU    Mem   Disk    Net
 23:07:10    0.85  44.11   2.40   0.19    0.01   0.00   0.00   0.00
 23:07:11    7.00  95.17   0.00   0.00    0.00   0.00   0.00   0.00
 23:07:12    4.00  95.63   0.00   0.00    0.00   0.00   0.00   0.00
 23:07:13    5.00  96.09   0.00   0.00    0.00   0.00   0.00   0.00
 23:07:14    5.00  96.55   0.00   0.00    0.00   0.00   0.00   0.00
 23:07:15    5.00  97.01   0.00   0.00    0.00   0.00   0.00   0.00
 23:07:16    6.00  97.47   0.00   0.00    0.00   0.00   0.00   0.00
 23:07:17    5.00  97.92   0.00   0.00    0.00   0.00   0.00   0.00
 23:07:18    9.00  97.84   2.00   0.00    0.00  20.51   0.04   0.00
 23:07:19    6.00  97.92   2.75   0.00    0.00  13.04   0.04   0.00
 23:07:20    6.00  97.91   2.85   0.00    0.00  18.22   0.04   0.00
 23:07:21    9.00  97.88   8.87   0.00    0.00  13.46   0.04   0.00
 23:07:22    5.00  97.91   2.71   0.00    1.00  12.06   0.03   0.00
 23:07:23    6.00  98.02   2.27   0.00    0.00   6.90   0.03   0.00
 23:07:24    7.00  98.01   2.75   0.00    0.00   9.25   0.03   0.00
 23:07:25    6.00  98.04   3.82   0.00    0.00  19.28   0.04   0.00
 23:07:26    6.00  97.99   3.34   0.00    0.00  26.05   0.05   0.00
 23:07:27   11.00  97.95   3.47   0.00    0.00  21.79   0.05   0.00
 23:07:28    6.00  97.84   3.00   0.00    0.00  21.41   0.04   0.00
 23:07:29    6.00  97.86   2.85   0.00    0.00  16.05   0.04   0.00
 23:07:30    7.00  97.89   3.90   0.00    0.00  19.42   0.04   0.00
 23:07:31    6.00  97.93   2.50   0.00    0.00  24.07   0.03   0.00
             ------ Utilisation ------     ------ Saturation ------
     Time    %CPU   %Mem  %Disk   %Net     CPU    Mem   Disk    Net
 23:07:32    7.00  97.99   1.15   0.00    0.00  27.64   0.02   0.00
 23:07:33    8.00  97.94   2.75   0.00    0.00  20.14   0.04   0.00
 23:07:34    6.00  98.08   3.30   0.00    0.00  17.88   0.04   0.00
 23:07:35   29.00  77.29   2.45   0.00    0.00   2.71   0.02   0.00
 23:07:36   21.00  77.28  10.50   0.00    0.00   0.00   0.00   0.00
 23:07:37    3.00  77.28   0.00   0.00    0.00   0.00   0.00   0.00
 23:07:38    2.00  77.27   0.00   0.00    0.00   0.00   0.00   0.00
被执行的程序,很快占用了大量内存。在23时07分18秒时,内存页面扫描器开始扫描所显示的饱和值,在23点07分35秒的内存加载程序被终止。

下面是磁盘负载示范,
$ sysperfstat 1
             ------ Utilisation ------     ------ Saturation ------
     Time    %CPU   %Mem  %Disk   %Net     CPU    Mem   Disk    Net
 23:15:35    0.85  44.11   2.40   0.19    0.01   0.00   0.00   0.00
 23:15:36    2.00  78.27   0.00   0.00    0.00   0.00   0.00   0.00
 23:15:37    4.00  78.27   0.00   0.00    0.00   0.00   0.00   0.00
 23:15:38   19.00  78.27   0.00   0.00    0.00   0.00   0.00   0.00
 23:15:39   43.00  78.32  31.46   0.00    0.00   0.00   0.00   0.00
 23:15:40   84.00  78.31  17.65   0.00    4.00   0.00   0.00   0.00
 23:15:41   70.00  78.31  32.71   0.00    0.00   0.00   0.00   0.00
 23:15:42   66.00  78.41  50.90   0.00    0.00   0.00   0.00   0.00
 23:15:43   88.00  78.47  57.14   0.00    0.00   0.00   0.00   0.00
 23:15:44  100.00  78.55  30.09   0.00    1.00   0.00   0.00   0.00
 23:15:45  100.00  78.56  44.72   0.00    2.00   0.00   0.03   0.00
 23:15:46   98.00  78.55  51.16   0.00    2.00   0.00   0.06   0.00
 23:15:47   84.00  78.58  88.13   0.00    4.00   0.00   0.19   0.00
 23:15:48   93.00  78.59  76.20   0.00    2.00   0.00   0.11   0.00
 23:15:49   73.00  78.60 100.00   0.00    3.00   0.00   0.31   0.00
 23:15:50   91.00  78.63  57.28   0.00   10.00   0.00   0.11   0.00
 23:15:51   83.00  78.70 100.00   0.00    4.00   0.00   0.62   0.00
 23:15:52   75.00  78.67 100.00   0.00    0.00   0.00   0.99   0.00
 23:15:53   73.00  78.69 100.00   0.00    2.00   0.00   0.93   0.00
若干程序运行时使用磁盘读写,随着磁盘占用率的上升,最终可以看出磁盘饱和度。

下面是网络负载示范,
$ sysperfstat 1
             ------ Utilisation ------     ------ Saturation ------
     Time    %CPU   %Mem  %Disk   %Net     CPU    Mem   Disk    Net
 23:27:41    0.85  44.11   2.40   0.19    0.01   0.00   0.00   0.00
 23:27:42    3.00  80.98   0.00   0.00    0.00   0.00   0.00   0.00
 23:27:43    2.00  80.98   0.00   0.00    0.00   0.00   0.00   0.00
 23:27:44   17.00  80.98   0.00   0.00    0.00   0.00   0.00   0.00
 23:27:45   46.00  80.49  22.05  54.20    1.00   0.00   0.00   0.00
 23:27:46   50.00  79.83  14.19  78.18    0.00   0.00   0.00   0.00
 23:27:47   48.00  79.39   8.04  80.94    0.00   0.00   0.00   0.00
 23:27:48   54.00  79.62   3.06  70.89    4.00   0.00   0.00   0.00
 23:27:49   39.00  79.43   6.78  74.52    0.00   0.00   0.00   0.00
 23:27:50    3.00  79.43   0.00   0.00    0.00   0.00   0.00   0.00
 23:27:51    3.00  79.43   0.00   0.00    0.00   0.00   0.00   0.00
 23:27:52    3.00  79.43   0.00   0.00    0.00   0.00   0.00   0.00
 23:27:53    4.00  79.43   0.00   0.00    0.00   0.00   0.00   0.00
 这是一个大的文件在网络上被传输,网络利用率清楚地表明,这种情况正在发生,这也引起了一些CPU和磁盘利用率。示范网络饱和度非常困难 -提供的这种值测量反应并不如人们希望的(网络只有饱和时可见真的是饱和!也并不是所有的网卡提供的饱和值)。

 sysperfstat可以(且应该)使用较大的时间间隔。在这里,我们样本相当空闲系统每隔30秒,
$ sysperfstat 30
             ------ Utilisation ------     ------ Saturation ------
     Time    %CPU   %Mem  %Disk   %Net     CPU    Mem   Disk    Net
 23:34:51    0.85  44.11   2.40   0.19    0.01   0.00   0.00   0.00
 23:34:21    6.83  79.42   0.00   0.01    0.30   0.00   0.00   0.00
 23:34:51    5.07  79.42   0.00   0.02    0.00   0.00   0.00   0.00
 23:35:21    5.43  79.42   0.00   0.02    0.00   0.00   0.00   0.00
 23:35:51    5.23  79.42   0.00   0.01    0.00   0.00   0.00   0.00
 23:36:21    5.70  79.41   0.00   0.01    0.00   0.00   0.00   0.00
 23:36:51    5.50  79.41   0.13   0.01    0.00   0.00   0.00   0.00
 23:37:21    4.27  79.41   0.00   0.01    0.00   0.00   0.00   0.00
 23:37:51    5.60  79.41   0.00   0.01    0.00   0.00   0.00   0.00
 23:38:21    3.37  79.41   0.00   0.01    0.00   0.00   0.00   0.00
 23:38:51    4.07  79.41   0.07   0.01    0.13   0.00   0.00   0.00
 23:39:21    4.13  79.41   0.07   0.01    0.03   0.00   0.00   0.00
 23:39:51    5.67  79.41   0.00   0.01    0.00   0.00   0.00   0.00

2.2 prtdevs
prtdevs是一款用来快速打印出所有的网络接口设备实例名的小工具,无论它们是否被探测到,再加上一些更常用的细节。
 用法: prtdevs [-h]
        prtdevs                 # 设备实例名称
        prtdevs -h              # 打印帮助

以下是该程序的一些示例,打印出设备实例名称,整齐列出了所有的网络接口,无论是探测与否。
这个例子是在UltraSPARC10,
   $ uname -i
   SUNW,Ultra-5_10
   $
   $ prtdevs
   cpu: 0
   mem: 384 Mb
   disk: dad0 dad1 fd0 sd16 sd31
   network: hme0

另一个例子是,
   $ uname -i
   SUNW,Ultra-60
   $
   $ prtdevs
   cpu: 0 2
   mem: 1024 Mb
   disk: fd0 lofi1 md0 sd0 sd1 sd6
   network: hme0 qfe0 qfe1 qfe2 qfe3 qfe4 qfe5 qfe6 qfe7


3 CPU性能监控工具
3.1 mptstat
mpstat是solaris系统自带的实时监控工具,可以查看每个CPU处理器的统计信息。mpstat命令以表格形式报告每个处理器的统计信息,表格中的每一行代表一个处理的活动情况。mpstat可以确定每一个CPU都在花时间做什么:比如,分配给体系、用户、等待、空闲时间、体系调用、锁竞争、中断、错误、交织调用。
基本用法:mpstat [interval [count]]
 例如,
mpstat 5 2   # 每5秒打印,共2次
字段解释:
CPU   CPU ID
Minf  轻微故障(minor faults)
Mjf   重要故障(major faults)
Xcal  处理机间的调用
Intr  中断数
Ithr  线程中断数(不包括时钟中断)
Csw   上下文切换次数
Icsw  强制的上下文切换次数
Migr  处理器之间的线程迁移数
Smtx  内核互斥体
Srw   内核读/写互斥体
syscl  系统调用次数
usr   用户时间所占百分比
sys   系统时间所占百分比
wt   等待时间所占百分比
idle  空闲时间所占百分比


下面是一个简单的默认输出例子。
bash-3.00$ mpstat 5
CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
  0   43   0   12   329  106  189    4   11   24    3  8625    1   1   0  99
  1   82   0   11    41    6  169    3   10   25    3  9962    1   1   0  99
  2   70   0   13    40    7  151    3    9   23    3  9171    1   1   0  99
  3   67   0   10    52   20  134    2    8   21    2  5400    0   1   0  99
  4   58   0   12   171  139   93    1    5   17    1  2427    0   1   0  99
  5   40   0   11    37    7  123    2    6   20    2  6396    0   1   0  99
  6   40   0   10    38    7  118    2    6   19    2  7795    0   1   0  99
  7   41   0   11    36    7  123    2    6   19    2  5961    0   1   0  99
CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
  0    0   0    0   310  105   36    0    1    1    0    28    0   0   0 100
  1    0   0    0    38    6   40    0    1    0    0    21    0   0   0 100
  2    0   0    0    17    2   23    0    1    0    0     3    0   1   0  99
  3    0   0    0    17   15    2    0    0    0    0     1    0   0   0 100
  4    0   0    0    11    8    7    0    0    0    0    13    0   0   0 100
  5    0   0    0    44   21   45    0    1    0    0    21    0   0   0 100
  6    0   0    0     6    2    5    0    0    0    0     5    0   0   0 100
  7    8   0    0    55   23   53    0    0    0    0    84    0   0   0 100
CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
  0    0   0    0   310  105   17    0    0    0    0    22    0   0   0 100
  1    0   0    0    27    5   28    0    1    1    0    21    0   0   0 100
  2    0   0    0    26    4   27    0    0    0    0    13    0   1   0  99
  3    0   0    0    24    7   21    0    1    1    0     2    0   0   0 100
  4    0   0    0    16    7   11    0    1    1    0     1    0   0   0 100
  5    0   0    0    46   21   44    0    0    0    0    20    0   0   0 100
  6    0   0    0    11    3   12    0    0    0    0     6    0   0   0 100
  7    0   0    0    48   24   46    0    0    0    0    82    0   0   0 100

4 MEM性能监控工具
4.1 swapinfo
swapinfo是一款打印虚拟内存(交换)的统计信息,以及内存和磁盘使用情况的工具。
 用法: swapinfo [ -h ]
        swapinfo   # 打印状态
     swapinfo -h  # 打印帮助
 字段解释:
RAM Total  # 物理内存总量
RAM Unusable # 由OBP(OpenBootPROM,SUN服务器的BIOS)和TSBs消耗的内存
RAM Kernel  # 驻留在内存的内核程序(通常是被锁的)占用的内存量
RAM Locked  # 从交换分区锁定的内存
RAM Used  # 执行程序,库,页面缓存占用的内存
RAM Avail  # 可立即使用的空闲内存
Disk Total  # 配置为交换分区的磁盘总量
Disk Alloc  # 磁盘交换分区已分配量(由页输出使用)
Disk Free  # 空闲的磁盘交换分区
Swap Total  # 可使用的交换分区总量
Swap Alloc  # 被分配(使用)的交换分区
Swap Unalloc # 预留出来但没有被使用的交换分区
Swap Avail  # 被预留的可用交换分区
Swap MinFree # 在被预留的可用交换分区中保持空闲的部分

下面是一个示例,从一个普通用户帐户下即可运行,可以看到该工具是运行在384MB的RAM和512.4MB磁盘交换系统上。
 $ swapinfo
 RAM  _____Total   384.0 Mb
 RAM    Unusable    21.2 Mb
 RAM      Kernel    64.8 Mb
 RAM      Locked     3.8 Mb
 RAM        Used   231.1 Mb
 RAM       Avail    63.2 Mb
 
 Disk _____Total   512.4 Mb
 Disk      Alloc    90.2 Mb
 Disk       Free   422.2 Mb
 
 Swap _____Total   760.7 Mb
 Swap      Alloc   270.9 Mb
 Swap    Unalloc    13.4 Mb
 Swap      Avail   476.4 Mb
 Swap  (MinFree)    46.0 Mb
 
从上面的例子我们可以看到,有63.2Mb的内存是空闲的,磁盘上有476.4 Mb空间可用于交换,内核程序占用了64.8Mb内存,另外有21.2Mb内存被OBP和TSBs消耗。

5 DISK性能监控工具
5.1 iotop
iotop一款通过DTrace打印磁盘I/O各类信息的工具,磁盘I/O信息包括的细节有大小(字节)和磁盘I/O时间。
 用法: iotop [-C] [-D|-o|-P] [-j|-Z] [-d device] [-f filename]
        [-m mount_point] [-t top] [interval [count]]

  iotop     # 默认输出,5秒的时间间隔

  -C  # 不清除屏幕
  -D  # 打印时间差, 微秒 (过去的)
  -j  # 打印项目ID
  -o  # 打印磁盘完成请求的时间(微秒)
  -P  # 打印I/O百分比(按磁盘忙闲时间占用率)
  -Z  # 打印区域ID
  -d device # 根据磁盘名称探测 (比如, dad0)
  -f filename # 根据文件的完整路径名探测
  -m mount_point # 针对文件系统(将跳过原始事件)
  -t number # 按磁盘读写量排序打印前n行
 例子,
  iotop 1   # 1秒打印1次
  iotop -C  # 不清除屏幕
  iotop -P  # 打印I/O百分比(基于时间)
  iotop -j  # 打印项目ID
  iotop -Z  # 打印分区ID
  iotop -t 20  # 按磁盘读写量排序打印前20行
  iotop -C 5 12 # 每5秒打印1次,共打印12次

  字段:
  UID  用户ID
  PID  进程ID
  PPID  父进程ID
  PROJ  项目ID
  ZONE  区域ID
  CMD  进程命令名
  DEVICE    设备名称
  MAJ       设备主编号
  MIN       设备次编号
  D  方向, 读或写
  BYTES  操作的总大小,字节
  ELAPSED  从请求到完成的总消耗,自己
  DISKTIME  磁盘完成请求的总时间,自己
  %I/O  磁盘I/O的百分比, 基于时间的 (DISKTIME)
  load  1分钟内的平均负载
  disk_r  每例磁盘读取字节数
  disk_w  每例磁盘写入字节数

 下面是一个iotop的实例,这里使用了 –C选项不清除屏幕,而是滚动输出。
   # iotop -C
   Sampling... Please wait.
   2005 Jul 16 00:34:40,  load: 1.21,  disk_r:  12891 Kb,  disk_w:   1087 Kb
  
     UID    PID   PPID CMD              DEVICE  MAJ MIN D            BYTES
       0      3      0 fsflush          cmdk0   102   4 W              512
       0      3      0 fsflush          cmdk0   102   0 W            11776
       0  27751  20320 tar              cmdk0   102  16 W            23040
       0      3      0 fsflush          cmdk0   102   0 R            73728
       0      0      0 sched            cmdk0   102   0 R           548864
       0      0      0 sched            cmdk0   102   0 W          1078272
       0  27751  20320 tar              cmdk0   102  16 R          1514496
       0  27751  20320 tar              cmdk0   102   3 R         11767808
  
   2005 Jul 16 00:34:45,  load: 1.23,  disk_r:  83849 Kb,  disk_w:    488 Kb
  
     UID    PID   PPID CMD              DEVICE  MAJ MIN D            BYTES
       0      0      0 sched            cmdk0   102   4 W             1536
       0      0      0 sched            cmdk0   102   0 R           131072
       0  27752  20320 find             cmdk0   102   0 R           262144
       0      0      0 sched            cmdk0   102   0 W           498176
       0  27751  20320 tar              cmdk0   102   3 R         11780096
       0  27751  20320 tar              cmdk0   102   5 R         29745152
       0  27751  20320 tar              cmdk0   102   4 R         47203328
  
   2005 Jul 16 00:34:50,  load: 1.25,  disk_r:  22394 Kb,  disk_w:      2 Kb
  
     UID    PID   PPID CMD              DEVICE  MAJ MIN D            BYTES
       0  27752  20320 find             cmdk0   102   0 W             2048
       0      0      0 sched            cmdk0   102   0 R            16384
       0    321      1 automountd       cmdk0   102   0 R            22528
       0  27752  20320 find             cmdk0   102   0 R          1462272
       0  27751  20320 tar              cmdk0   102   5 R         17465344

 从上面的输出,我们可以看到一个tar命令从设备名为cmdk0的磁盘上不同的分区上进行读操作,最后的重点在主设备号102上,这一点可以在/dev/dsk路径下输入“ls –lL”后观察到对应的主设备号和分区号,disk_r和disk_w值给出了单位时间内整体的操作量,单位字节。
无论用iotop的完成请求时间,还是读写字节都能更准确的确定哪个进程使磁盘繁忙。(因为他们考虑到该操作是随机还是顺序的)
   # iotop -Co
   Sampling... Please wait.
   2005 Jul 16 00:39:03,  load: 1.10,  disk_r:   5302 Kb,  disk_w:     20 Kb
  
     UID    PID   PPID CMD              DEVICE  MAJ MIN D         DISKTIME
       0      0      0 sched            cmdk0   102   0 W              532
       0      0      0 sched            cmdk0   102   0 R           245398
       0  27758  20320 find             cmdk0   102   0 R          3094794
  
   2005 Jul 16 00:39:08,  load: 1.14,  disk_r:   5268 Kb,  disk_w:    273 Kb
  
     UID    PID   PPID CMD              DEVICE  MAJ MIN D         DISKTIME
       0      3      0 fsflush          cmdk0   102   0 W             2834
       0      0      0 sched            cmdk0   102   0 W           263527
       0      0      0 sched            cmdk0   102   0 R           285015
       0      3      0 fsflush          cmdk0   102   0 R           519187
       0  27758  20320 find             cmdk0   102   0 R          2429232
  
   2005 Jul 16 00:39:13,  load: 1.16,  disk_r:    602 Kb,  disk_w:   1238 Kb
  
     UID    PID   PPID CMD              DEVICE  MAJ MIN D         DISKTIME
       0      3      0 fsflush          cmdk0   102   4 W              200
       0      3      0 fsflush          cmdk0   102   6 W              260
       0      3      0 fsflush          cmdk0   102   0 W              883
       0  27758  20320 find             cmdk0   102   0 R            55686
       0      3      0 fsflush          cmdk0   102   0 R           317508
       0      0      0 sched            cmdk0   102   0 R           320195
       0      0      0 sched            cmdk0   102   0 W           571084
   [...]
这里的DISKTIME单位是微秒,在第一个例子中,我们可以看到find命令造成了总时长为3.094秒的使用磁盘时间。例子这里是5秒一次打印(默认),所以它可以客观的说明,find命令是保持60%的磁盘忙。

5.2 iosnoop
iosnoop一款通过DTrace实时打印磁盘I/O事件的工具。默认输出一下信息,如PID、块地址、大小、命令和路径等等。
 用法:  iosnoop [-a|-A|-DeghiNostv] [-d device] [-f filename]
   [-m mount_point] [-n name] [-p PID]

  iosnoop  # 默认输出

  -a   # 打印所有数据(大部分)
  -A   # 转储所有数据,以空格分隔
  -D   # 打印时间差, 微秒 (过去的)
  -e   # 打印设备名称
  -g   # 打印命令参数
  -i   # 打印设备实例
  -N   # 打印设备主编号和次编号
  -o   # 打印磁盘时间差, 微秒
  -s   # 打印开始时间, 微秒
  -t    # 打印完成时间, 微秒
  -v   # 打印完成时间, 字符串
  -d device # 根据磁盘名称探测 (比如, dad0)
  -f filename # 根据文件的完整路径名探测
  -m mount_point # 针对文件系统(将跳过原始事件)
  -n name  # 只针对进程名
  -p PID  # 只针对进程ID
  例子,
  iosnoop -v # 人们可读的时间串
  iosnoop -N # 打印设备主编号和次编号
  iosnoop -m / # 只在根文件系统探测事件
  
 字段解释:
  UID   用户ID
  PID   进程ID
  PPID  父进程ID
  COMM  该进程的命令名称
  ARGS  该进程的参数列表
  SIZE  操作大小,字节
  BLOCK  磁盘块的操作(位置)
  STIME   磁盘请求的时间戳,微秒
  TIME  磁盘完成的时间戳, 微秒
  DELTA  从请求到完成的时间差, 微秒
  DTIME  磁盘完成请求的时间,微秒
  STRTIME  磁盘完成请求的时间戳, 字符串
  DEVICE   设备名称
  INS      设备实例号
  D   方向,读或写
  MOUNT  挂载点
  FILE  I/O操作的文件名(主档名)

下面是一个iosnoop的实例,默认输出进程ID、读写大小、命令和路径。
# iosnoop
  UID   PID D    BLOCK   SIZE       COMM PATHNAME
  100 15795 R     3808   8192        tar /usr/bin/eject
  100 15795 R    35904   6144        tar /usr/bin/eject
  100 15795 R    39828   6144        tar /usr/bin/env
  100 15795 R     3872   8192        tar /usr/bin/expr
  100 15795 R    21120   7168        tar /usr/bin/expr
  100 15795 R    43680   6144        tar /usr/bin/false
  100 15795 R    44176   6144        tar /usr/bin/fdetach
  100 15795 R     3920   8192        tar /usr/bin/fdformat
  100 15795 R     3936   8192        tar /usr/bin/fdformat
  100 15795 R     4080   8192        tar /usr/bin/fdformat
  100 15795 R     9680   3072        tar /usr/bin/fdformat  
  100 15795 R     4096   8192        tar /usr/bin/fgrep
  100 15795 R    46896   6144        tar /usr/bin/fgrep
  100 15795 R     4112   8192        tar /usr/bin/file
[...]

下面这个例子使用了-v参数,以人们可以理解的时间戳方式打印读写操作。
# iosnoop -v
STRTIME                UID   PID D    BLOCK   SIZE       COMM PATHNAME
2005 Jan  6 19:33:31     0  7471 R    57136   8192       bash /usr/sbin/df
2005 Jan  6 19:33:31     0  7471 R    57152   8192       bash /usr/sbin/df
2005 Jan  6 19:33:40     0  7472 R    23544   4096     uptime /usr/bin/sparcv9/uptime  
2005 Jan  6 19:33:40     0  7472 R  4618080   8192     uptime /lib/sparcv9/libc.so.1
2005 Jan  6 19:33:40     0  7472 R  4618144   8192     uptime /lib/sparcv9/libc.so.1
2005 Jan  6 19:33:40     0  7472 R  4618160   8192     uptime /lib/sparcv9/libc.so.1
2005 Jan  6 19:33:40     0  7472 R  4618096   8192     uptime /lib/sparcv9/libc.so.1
2005 Jan  6 19:33:41     0  7472 R  4617456   8192     uptime /lib/sparcv9/libc.so.1
2005 Jan  6 19:33:41     0  7472 R  4618624   8192     uptime /lib/sparcv9/libc.so.1
2005 Jan  6 19:33:41     0  7472 R  4617408   8192     uptime /lib/sparcv9/libc.so.1
2005 Jan  6 19:33:49     0  7473 R    23544   4096     uptime /usr/bin/sparcv9/uptime
2005 Jan  6 19:33:53     0     3 W     8305   2560    fsflush <none>
[...]

下面的例子告诉大家iosnoop可以指定路径或文件进行探测读写操作,如-m后跟路径即可探测该路径下的读写操作,-f后跟全路径文件名即可探测该文件的读写操作。
# iosnoop -m /export/home
  UID   PID D    BLOCK   SIZE       COMM PATHNAME
    0  2427 R     1040   1024       bash /export/home
    0  2427 R     1046   1024       bash /export/home/brendan
    0  7590 R     1078   1024       grep /export/home/brendan/Dev
    0  7590 R     3648   8192       grep /export/home/brendan/Dev/iosnoop  
    0  7591 R     1062   1024         vi /export/home/brendan/.bashrc
    0  7591 W     1062   1024         vi /export/home/brendan/.bashrc
[...]
   
# iosnoop -f /var/sadm/install/contents
  UID   PID D    BLOCK   SIZE       COMM PATHNAME
    0  7602 R  1985792  98304     pkgchk /var/sadm/install/contents
    0  7602 R  8082528 131072     pkgchk /var/sadm/install/contents
    0  7602 R  8082784 131072     pkgchk /var/sadm/install/contents
    0  7602 R  8083040 131072     pkgchk /var/sadm/install/contents
    0  7602 R  8083296 131072     pkgchk /var/sadm/install/contents
[...]

5.3 iofile.d
iofile.d一款通过DTrace探测进程读写的每个文件I/O等待时间的小工具。从下面这个例子可以看到,进行探测期间活动的进程ID、命令名、I/O等待时间、全路径文件名。
   # iofile.d
   Tracing... Hit Ctrl-C to end.
   ^C
      PID CMD              TIME FILE
     5206 tar               109 /var/adm/acct/nite
     5206 tar               110 /var/adm/acct/sum
     5206 tar               114 /var/adm/acct/fiscal
     5206 tar               117 /var/adm/messages.3
     5206 tar               172 /var/adm/sa
     5206 tar              3605 /var/adm/messages.2
     5206 tar              4548 /var/adm/spellhist
     5206 tar              5769 /var/adm/exacct/brendan1task
     5206 tar              6416 /var/adm/acct
     5206 tar              7587 /var/adm/messages.1
     5206 tar              8246 /var/adm/exacct/task
     5206 tar              8320 /var/adm/pool
     5206 tar              8973 /var/adm/pool/history
     5206 tar              9183 /var/adm/exacct
        3 fsflush         10882 <none>
     5206 tar             11861 /var/adm/exacct/flow
     5206 tar             12042 /var/adm/messages.0
     5206 tar             12408 /var/adm/sm.bin
     5206 tar             13021 /var/adm/sulog
     5206 tar             19007 /var/adm/streams
     5206 tar             21811 <none>
     5206 tar             24918 /var/adm/exacct/proc
在上面的输出,我们可以看到,tar命令花了24918(25毫秒)用于等待文件/var/adm/exacct/proc的读写。

6 NET性能监控工具
6.1 nicstat
nicstat是一款网络接口统计工具,如千字节/秒的读取和写入,数据包/秒的读取和写入,数据包的平均大小,利用率和饱和度等。
用法:    nicstat [-hsz] [-i int[,int...]] | [interval [count]]
          -h              # 打印帮助
           -s              # 打印输出概要信息
           -z              # 不显示结果为0的行
           -i int[,int...] # 仅打印指定的网络接口
   例如,
           nicstat         # 打印系统自启动后的概要信息
           nicstat 1       # 每1秒不间断打印
           nicstat 1 5     # 每1秒打印,共5次
           nicstat -i hme0 # 只打印网络接口hme0的信息

字段解释:
rKb/s——读字节数/秒
wKb/s——写字节数/秒
rPk/s——读数据包数/秒
wPk/s——写数据包数/秒
rAvs——读数据包的平均大小,单位字节
wAvs——写数据包的平均大小,单位字节
%Util——利用率
Sat——饱和度

下面是一个nicstat的实例,它打印统计为网络接口,如字节/秒的读写。在这里,我们运行它的间隔为1秒。

$ nicstat 1
     Time   Int   rKb/s   wKb/s   rPk/s   wPk/s    rAvs    wAvs   %Util     Sat
 12:33:04  hme0    1.51    4.84    7.26   10.32  213.03  480.04    0.05    0.00
 12:33:05  hme0    0.20    0.26    3.00    3.00   68.67   90.00    0.00    0.00
 12:33:06  hme0    0.14    0.26    2.00    3.00   73.00   90.00    0.00    0.00
 12:33:07  hme0    0.14    0.52    2.00    6.00   73.00   88.00    0.01    0.00
 12:33:08  hme0    0.24    0.36    3.00    4.00   81.33   92.00    0.00    0.00
 12:33:09  hme0    2.20    1.77   16.00   18.00  140.62  100.72    0.03    0.00
 12:33:10  hme0    0.49    0.58    8.00    9.00   63.25   66.00    0.01    0.00
 12:33:11  hme0   12.16 1830.38  185.06 1326.42   67.26 1413.06   15.09    0.00
 12:33:12  hme0   19.03 3094.19  292.88 2229.11   66.53 1421.40   25.50    0.00
 12:33:13  hme0   19.55 3151.87  301.00 2270.98   66.50 1421.20   25.98    0.00
 12:33:14  hme0   11.99 1471.67  161.07 1081.45   76.25 1393.49   12.15    0.00
 12:33:15  hme0    0.14    0.26    2.00    3.00   73.00   90.00    0.00    0.00
 12:33:16  hme0    0.14    0.26    2.00    3.00   73.00   90.00    0.00    0.00
 12:33:17  hme0    0.14    0.26    2.00    3.00   73.00   90.00    0.00    0.00
 [...]

在12点33分11秒我们可以看到,在系统上运行的控制程序向另一台主机发送了18Mb左右的消息量,1326个数据包,而这1秒内写数据包的平均大小是1413字节,网络的利用率已达到15%。

下面是在具有多个网络接口的系统上运行nicstat实例,5秒的间隔时间。

$ nicstat 5
     Time   Int   rKb/s   wKb/s   rPk/s   wPk/s    rAvs    wAvs   %Util     Sat
 00:58:02  hme0    0.12    0.01    1.05    0.04  113.53  238.16    0.00     0.00
 00:58:02  qfe0    2.94    0.53    5.97    3.70  504.29  147.69    0.03     0.00
 00:58:02  qfe1    6.79   26.37   17.71   25.47  392.55 1060.22    0.27     0.00
 00:58:02  qfe2    0.27    7.78    3.24    6.10   86.74 1306.18    0.07     0.00
 00:58:02  qfe3    1.15   20.30    8.09   15.78  145.72 1317.10    0.18     0.00
     Time   Int   rKb/s   wKb/s   rPk/s   wPk/s    rAvs    wAvs   %Util     Sat
 00:58:07  hme0    0.00    0.00    0.00    0.00    0.00    0.00    0.00     0.00
 00:58:07  qfe0    0.04    0.25    0.60    0.80   60.00  316.25    0.00     0.00
 00:58:07  qfe1    0.00    0.00    0.00    0.00    0.00    0.00    0.00     0.00
 00:58:07  qfe2    0.00    0.00    0.00    0.00    0.00    0.00    0.00     0.00
 00:58:07  qfe3    0.14    0.19    0.60    0.60  246.67  319.67    0.00     0.00
     Time   Int   rKb/s   wKb/s   rPk/s   wPk/s    rAvs    wAvs   %Util     Sat
 00:58:12  hme0    0.00    0.00    0.00    0.00    0.00    0.00    0.00     0.00
 00:58:12  qfe0   10.34    1.10   19.76   12.18  535.81   92.59    0.09     0.00
 00:58:12  qfe1    0.00    0.00    0.00    0.00    0.00    0.00    0.00     0.00
 00:58:12  qfe2    0.00    0.00    0.00    0.00    0.00    0.00    0.00     0.00
 00:58:12  qfe3    0.14    0.19    0.60    0.60  246.67  319.67    0.00     0.00
 [...]

上面的例子展示,只有少量的网络流量。

6.2 checkcable
checkcable是一个打印网卡状态的工具,如双工类型,网络带宽和自适应。checkcable还可以检查是否有电缆被拔掉。
用法:    checkcable [-h] [interface ...]
         checkcable                       # 检测所有配置的网口
          checkcable hme0                  # 检测指定的网口

下面是一个CheckCable在Solaris上打印出网络状态接口链接状态的实例。

   # checkcable
   Interface   Link Duplex  Speed  AutoNEG
   hme0          UP   FULL    100       ON

字段解释:
Interface——网络接口
Link——链接状态
Duplex——双工模式
Speed——网络带宽,单位Mb
AutoNEG——自适应

由此我们得知上面的实例情况,网口名称是hme0,网络链接状态是联通的(有网线插入),双工模式是全双工(即同时支持收发消息),网络带宽为100Mb,是自适应模式。

如果网卡不提供足够的状态信息来填充各个领域,就会如下面的例子打印一些???

   # checkcable
   Interface   Link Duplex  Speed  AutoNEG
   rtls0        ???   FULL    100      ???

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值