7.16.2011

Useful commands for performance measurement in Solaris

Solaris: 性能測定コマンド

一般的な Java + Oracle の Solaris 10 サーバ環境で性能を測定するコマンドの例。負荷テストや性能監視などに。
いずれも10秒ごとにデータを採取している。

・スレッド(プロセッサ)単位のCPU使用率 – mpstat

   1: $ mpstat -q 10
   2: CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
   3:   0  129   0   27   366  114  402    9   23   14    0   949    2   6   0  92
   4:   1  137   0   26   115   26  387    8   24   11    0   956    2   3   0  94
   5: CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
   6:   0    0   0    0   348  121   77    0    2    0    0    88    0   1   0  99
   7:   1    1   0    0    58   16   54    0    2    0    0    45    0   0   0 100
   8: CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
   9:   0    0   0    4   407  127  157    2   14    4    0   216    0   3   0  96
  10:   1   76   0   12   125   43  147    3   12    5    0  1237    0   4   0  95
  11: CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
  12:   0    0   0  379   604  116  332    3   29    7    0  1273    0  12   0  88
  13:   1    0   0  163   615  144  344    9   27   10    0  3014    1  15   0  83
  14: CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
  15:   0    0   0 1093  1350  117  323   12   19   24    0 16569    4  34   0  62
  16:   1    0   0  943  1296  110  297   12   19   38    0  9196    2  24   0  74
  17: CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
  18:   0   36   0  629   710  122  980    8   23   53    0  7377    2  22   0  76
  19:   1   21   0  253   838  103 1065   15   22   52    0 14078    4  31   0  65
  20: CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
  21:   0    0   0  127   492  123  313    2    8    3    0  1481    1   9   0  90
  22:   1    0   0   57   319  106  239    5    8    5    0  3047    2  16   0  83
  23: CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
  24:   0    2   0    0   408  120  192    1    4    0    0  1366    1   8   0  92
  25:   1    0   0    0   160   84  190    1    5    1    0  1589    1   8   0  92
  26: CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
  27:   0   54   0    0   369  126  113    0    3    2    0   353    0   2   0  98
  28:   1    0   0    0    87   21   93    0    3    2    0    37    0   1   0  99
  29: CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
  30:   0    0   0    0   342  120   81    0    1    0    0    90    0   1   0  99
  31:   1    3   0    0    84   28   84    0    2    1    0    47    0   1   0  99
  32: CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
  33:   0    0   0    0   362  139   82    1    2    0    0   103    1   2   0  97
  34:   1    0   0    0    76   24   71    1    2    0    0    72    0   1   0  98
  35: CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
  36:   0   54   0    0   336  115   71    1    3    1    0   342    0   3   0  97
  37:   1    0   0    0    91   27   87    0    3    1    0    59    0   1   0  98
  38: ^C$

usr  user) ユーザアプリケーションのCPU使用率
sys  system) カーネルプロセス・システムコールのCPU使用率
wt   wait I/O) I/O待ちを示す項目だが、Solaris 10 では常に0
idl   idle) 100(%) から usr + sys を引いた値 (ただし、丸め誤差のため総和が100にならない場合もある)

・CPUキュー数/メモリ使用率 – vmstat

   1: $ vmstat -q 10
   2:  kthr      memory            page            disk          faults      cpu
   3:  r b w   swap  free  re  mf pi po fr de sr f0 s0 s1 --   in   sy   cs us sy id
   4:  0 0 0 494940 16372   8  26  0  0  0  0 16 -0  0 -1  0  359  295  144  0  2 98
   5:  0 0 0 493008 18988   1   3  0  0  0  0  0  0  0  0  0  363  141  121  0  1 99
   6:  0 0 0 493008 19000  19  55  0  0  0  0  0  0  0  0  0  364  397  131  1  1 98
   7:  0 0 0 493008 19000   1   1  0  0  0  0  0  0  2  0  0  364  136  129  0  1 99
   8:  0 0 0 492796 18824   4  20  0  0  0  0  0  0  9  0  0  343 3266  163  1 20 79
   9:  0 0 0 488596 14664  17  50  0  0  0  0  0  0 41  0  0  294 17012 207  4 82 13
  10:  0 0 0 489472 15500   2   6  0  0  0  0  0  0 74  0  0  326 17099 301  4 73 22
  11:  0 0 0 487320 13360   0   1  0  0  0  0  0  0 99  0  0  405 11107 1047 4 50 46
  12:  0 0 0 487200 13260   0   3  0  0  0  0  0  0 66  0  0  356 5300  428  3 42 55
  13:  3 0 0 488736 14824  18  54  0  0  0  0  0  0 91  0  0  379 3201  403  2 34 64
  14:  1 0 0 488860 14912   0   3  0  0  0  0  0  0 101 0  0  411 3763  407  1 27 72
  15:  0 0 0 487524 13588   1   1  0  0  0  0  0  0 97  0  0  438 4056  450  1 20 78
  16:  0 0 0 487940 13996  18  55  0  0  0  0  0  0 92  0  0  430 3790  393  1 20 79
  17:  0 0 0 487564 13624   1   1  0  0  0  0  0  0 95  0  0  457 5576  512  2 18 80
  18:  0 0 0 486716 12752   3  19  0  0  0  0  0  0 65  0  0  457 3492 19088 2 32 66
  19:  21 0 0 473188 5932   1   5  0 68 1077 0 6488 0 17 0 0  209  309 8714  0 97  2
  20:  12 0 0 470700 13140 19  58  0 52 52  0  0  0 40  0  0  238 1843  853  2 83 15
  21:  10 0 0 465000 11884  1   2  0 212 931 0 1709 0 99 0 0  432 3292 7224  2 66 32
  22:  kthr      memory            page            disk          faults      cpu
  23:  r b w   swap  free  re  mf pi po fr de sr f0 s0 s1 --   in   sy   cs us sy id
  24:  0 0 0 461532 13188  17  55  0  0  0  0  0  0 19  0  0  398 3856  165  2 13 86
  25:  0 0 0 461416 13140   1   2  0  0  0  0  0  0  4  0  0  374 2590  132  1  7 92
  26: ^C$

kthr:r       Kernel THReads in Run queue) CPUキュー数
memory:free  メモリ空き容量(KB)

※ディスク稼働率の概要、CPU全体の使用率も取得可能
※メモリ全体量はprtconf コマンドで取得可能

   1: $ /usr/sbin/prtconf |grep Memory
   2: Memory size: 540 Megabytes
   3: $

・スライス単位のディスク稼働率 – iostat -x

   1: $ iostat -xnmpC 10
   2:                     extended device statistics
   3:     r/s    w/s   kr/s   kw/s wait actv wsvc_t asvc_t  %w  %b device
   4:     0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 c0
   5:     0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 c0t0d0
   6:     2.3    1.3  180.0   13.2  0.0  0.1    0.0   39.3   0   2 c1
   7:     2.3    1.3  180.0   13.2  0.0  0.1    0.0   39.3   0   2 c1t0d0
   8:     2.3    1.3  180.0   13.2  0.0  0.1    0.0   39.3   0   2 c1t0d0s0
   9:     0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 c1t0d0s2
  10:     0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 c1t0d0s8
  11:     0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 c1t0d0p0
  12:     0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 c1t0d0p1
  13:     0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 fd0
  14:                     extended device statistics
  15:     r/s    w/s   kr/s   kw/s wait actv wsvc_t asvc_t  %w  %b device
  16:     0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 c0
  17:     0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 c0t0d0
  18:     0.1    6.9    0.5   20.4  0.0  0.0    0.0    1.4   0   0 c1
  19:     0.1    6.9    0.5   20.4  0.0  0.0    0.0    1.4   0   0 c1t0d0
  20:     0.1    6.9    0.5   20.4  0.0  0.0    0.0    1.4   0   0 c1t0d0s0
  21:     0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 c1t0d0s2
  22:     0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 c1t0d0s8
  23:     0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 c1t0d0p0
  24:     0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 c1t0d0p1
  25:     0.0    0.0    0.0    0.0  0.0  0.0    0.0    0.0   0   0 fd0
  26: ^C$

%b  ディスクビジー率

・ネットワーク通信量 – netstat -i

   1: $ netstat -in 10
   2:     input   e1000g    output       input  (Total)    output
   3: packets errs  packets errs  colls  packets errs  packets errs  colls
   4: 9152    0     7588    0     0      9317    0     7753    0     0
   5: 29      0     28      0     0      29      0     28      0     0
   6: 1859    0     3575    0     0      1859    0     3575    0     0
   7: 2541    0     5060    0     0      2541    0     5060    0     0
   8: 11560   0     22968   0     0      11560   0     22968   0     0
   9: 15123   0     30140   0     0      15123   0     30140   0     0
  10: 19      0     19      0     0      19      0     19      0     0
  11: 14      0     14      0     0      14      0     14      0     0
  12: ^C$

input:packets  受信パケット数
output:packets 送信パケット数

・プロセス状態 – ps

   1: $ while true; do
   2: > ps -eo ruser,pid,ppid,s,pcpu,pmem,vsz,rss,stime,time,nice,pri,tty,args
   3: > sleep 10
   4: > done
   5:    RUSER   PID  PPID S %CPU %MEM  VSZ  RSS    STIME        TIME NI PRI TT      COMMAND
   6:     root     0     0 T  0.0  0.0    0    0 16:12:02       00:21 SY  96 ?       sched
   7:     root     1     0 S  0.0  0.2 2496  740 16:12:05       00:00 20  59 ?       /sbin/init
   8:     root     2     0 S  0.0  0.0    0    0 16:12:05       00:06 SY  98 ?       pageout
   9:     root     3     0 S  0.1  0.0    0    0 16:12:05       00:02 SY  60 ?       fsflush
  10:     root   164     1 S  0.0  0.4 3832 1900 16:12:20       00:00 20  59 ?       /usr/lib/picl/picld
  11:     root     7     1 S  0.0  1.3 13076 6688 16:12:07       00:06 20  59 ?       /lib/svc/bin/svc.startd
  12:     root     9     1 S  0.0  1.1 11260 5840 16:12:07       00:12 20  59 ?       /lib/svc/bin/svc.configd
  13:     root   370     7 S  0.0  0.2 2072  840 16:12:29       00:00 20  59 ?       /usr/lib/saf/sac -t 300
  14:     root   235     1 S  0.0  0.2 2372  692 16:12:22       00:00 20  59 ?       /lib/svc/method/iscsid
  15:     root   271     1 S  0.0  0.2 2864  844 16:12:23       00:00 20  59 ?       /usr/sbin/cron
  16:     root   394   370 S  0.0  0.2 2456 1048 16:12:30       00:00 20  59 ?       /usr/lib/saf/ttymon
  17:   daemon   157     1 S  0.0  0.4 4344 2064 16:12:20       00:00 20  59 ?       /usr/lib/crypto/kcfd
  18: (略)

・JavaVM ヒープ使用量 – jmap –heap

「jmap –heap pid」で、ヒープサマリーを定期的に出力。

   1: # while true; do
   2: > /usr/java/bin/jmap -heap 830 2>/dev/null
   3: > sleep 10
   4: > done
   5:  
   6: using thread-local object allocation.
   7: Parallel GC with 4 thread(s)
   8:  
   9: Heap Configuration:
  10:    MinHeapFreeRatio = 40
  11:    MaxHeapFreeRatio = 70
  12:    MaxHeapSize      = 134217728 (128.0MB)
  13:    NewSize          = 655360 (0.625MB)
  14:    MaxNewSize       = 4294901760 (4095.9375MB)
  15:    OldSize          = 1441792 (1.375MB)
  16:    NewRatio         = 8
  17:    SurvivorRatio    = 32
  18:    PermSize         = 16777216 (16.0MB)
  19:    MaxPermSize      = 67108864 (64.0MB)
  20:  
  21: Heap Usage:
  22: PS Young Generation
  23: Eden Space:
  24:    capacity = 13828096 (13.1875MB)
  25:    used     = 7330048 (6.990478515625MB)
  26:    free     = 6498048 (6.197021484375MB)
  27:    53.00836789099526% used
  28: From Space:
  29:    capacity = 1507328 (1.4375MB)
  30:    used     = 617960 (0.5893325805664062MB)
  31:    free     = 889368 (0.8481674194335938MB)
  32:    40.99704908288044% used
  33: To Space:
  34:    capacity = 1441792 (1.375MB)
  35:    used     = 0 (0.0MB)
  36:    free     = 1441792 (1.375MB)
  37:    0.0% used
  38: PS Old Generation
  39:    capacity = 10485760 (10.0MB)
  40:    used     = 6878688 (6.560028076171875MB)
  41:    free     = 3607072 (3.439971923828125MB)
  42:    65.60028076171875% used
  43: PS Perm Generation
  44:    capacity = 25165824 (24.0MB)
  45:    used     = 18436536 (17.58245086669922MB)
  46:    free     = 6729288 (6.417549133300781MB)
  47:    73.26021194458008% used
  48: ^C#

・JDBC 同時接続数(DBサーバ上で) – netstat -a

Oracle のインストールディレクトリ配下(通常は$ORACLE_HOME/network/admin 配下)にある「tnsnames.ora」で
定義されているポートに対するコネクションの数をカウント。
LISTEN の行も抽出されるので、解析の際には数値をデクリメントするとよい。

   1: $ while true; do
   2: > netstat -an | grep '\.1521 ' | wc -l
   3: > sleep 10
   4: > done
   5:        4
   6:        4
   7: ^C$

まとめ

CPU使用率(スレッド単位) mpstat –q interval
CPUキュー数 vmstat –q interval
メモリ使用率 vmstat –q interval
ディスク稼働率(スライス単位) iostat –xnmpC interval
ネットワーク通信量(インタフェース単位) netstat –in interval
プロセス状態 while true; do
  ps –eo options
  sleep interval
done
JavaVM ヒープ使用量 while true; do
  path_to_the/jmap –heap pid 2>/dev/null
  sleep interval
done
JDBC 同時接続数 while true; do
  netstat –an | grep '\.port ' | wc –l
  sleep interval
done

いずれの項目に対しての dtrace による採取方法も勉強中。

参考:
http://java.sun.com/javase/ja/6/docs/ja/technotes/tools/share/jmap.html

Solaris™ Performance and Tools
http://www.amazon.com/Solaris-Performance-Tools-Techniques-OpenSolaris/dp/0131568191
http://www.amazon.co.jp/Solaris-Performance-Tools-Techniques-OpenSolaris/dp/0131568191

0 件のコメント:

コメントを投稿