運用でたまに使うコマンド②

◼︎ 目次

  1. 概要
  2. pstack
  3. strace
  4. pstree
  5. mpstat
  6. 参考

◼︎ 概要

運用でたまに使うコマンド① の続きになります
障害調査、負荷調査などで使うコマンドをまとめます

◼︎ pstack

わかること
そのプログラム(プロセス)がその瞬間にどんな処理を実行しているのかがわかる
あくまでもスナップショットのため何度か実行して情報を表示するべき
プログラムが何かを待っている場合、何度pstackを実行しても同じコールスタックで待っているはず
一般にpstackは負荷が低いとされているのでパフォーマンスが劣化する可能性は低いツール

// 実行例
//   apacheのプロセス番号を指定してみる
$ sudo pstack 5751
#0  0x0000003134ceae5b in accept4 () from libc.so.6 // どんなOSの関数なのかわかる
#1  0x00007f0eed38fc77 in apr_socket_accept () from libyapr.so.0
#2  0x000000000044bb0d in unixd_accept ()
#3  0x000000000044a8b3 in child_main ()
#4  0x000000000044ac14 in make_child ()
#5  0x000000000044af1e in ap_mpm_run ()
#6  0x0000000000423fe4 in main ()

accept4はソケットへの接続を受けるっぽい
 

◼︎ strace

どんなシステムコールを持っているのかOSの何の関数で時間を使っているのかがわかる
リアルタイムにモニタリングできる

//// 使い方例

// コマンドを調べる
$ strace [command]

// プロセスを調べる
$ strace -p [pid]

// 時刻を表示する
// -t は秒単位で、-tt はマイクロ秒単位で表示
$ strace -tt command

// 統計情報を表示する
$ strace -c [command or -p pid] 

◼︎ pstree

プロセスの親子関係をツリー表示する
treeコマンドみたいに表示ができ-pでプロセス番号も表示できる

// 実行例
// psコマンドで出力されるプロセスをtree形式で表示しているイメージ
$ pstree
init─┬─acpid
     ├─atd
     ├─crond
     ├─java───51*[{java}]
     ├─mcelog
     ├─6*[mingetty]
     ├─mysqld_safe───mysqld───19*[{mysqld}]
     ├─ntpd
     ...
     └─apache
実際はもっとあるけど中略

◼︎ mpstat

mpstatとはCPUの使用状況を調べることができる

インストール

$ sudo yum install sysstat

使い方

// 1秒毎に3回取得する
$ mpstat -P ALL 1 3
Linux XXX (hostname)    12/20/2015  _x86_64_    (2 CPU)

01:35:05 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
01:35:06 AM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:35:06 AM    0    0.00    0.00    0.00    0.00    0.00    0.00    1.00    0.00   99.00
01:35:06 AM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

01:35:06 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
01:35:07 AM  all    0.00    0.00    0.50    0.00    0.00    0.00    0.00    0.00   99.50
01:35:07 AM    0    0.99    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.01
01:35:07 AM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

01:35:07 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
01:35:08 AM  all    0.50    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.50
01:35:08 AM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
01:35:08 AM    1    0.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00   99.00

Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
Average:     all    0.17    0.00    0.17    0.00    0.00    0.00    0.00    0.00   99.67
Average:       0    0.33    0.00    0.00    0.00    0.00    0.00    0.33    0.00   99.33
Average:       1    0.00    0.00    0.33    0.00    0.00    0.00    0.00    0.00   99.67
 

各項目の見方

項目 説明
CPU
  • プロセッサ番号
  • ALLは全てのプロセッサの平均値
%usr
  • ユーザレベル(アプリケーション)のCPU使用率
%nice
  • nice優先順位に従ってユーザレベルで実行された処理のCPU使用率
  • 基本0%になってるけどniceコマンドを使う状況になったら変わる可能性がある
%sys
  • システムレベル(カーネル)のCPU使用率
  • ハードウェア処理時間とソフトウェア割込み時間を含んでいない
%iowait
  • ディスクI/Oによる待ち時間の割合
  • 負荷にもよるけどDBサーバだと割りと10%くらいいっている
%irq
  • ハードウェア割込みに費やしたCPUの処理時間の割合
  • 基本0%
  • Interrupt ReQuestの略
%soft
  • ソフトウェア割込みに費やしたCPUの処理時間の割合
%steal
  • ハイパーバイザによって他の仮想プロセッサに処理を割り当てられたために起こる待ち時間の割合 (多分)
%quest
  • niceゲストを実行するためにCPUが費やした時間の割合
  • 手元のサーバでは表示されない
%idle
  • アイドル状態の割合
  • (アイドル時間:次の作業指示やデータを待つための時間のこと)
  • ディスクI/Oによる待ち時間は含まれない

プロセッサの確認方法

// プロセッサは2つあることになる
// その他cpuinfoにはcpuについて情報が載っている
$ cat /proc/cpuinfo | grep processor
processor   : 0
processor   : 1

主なオプションについて

オプション 説明
-P <cpu> 特定のCPUの指定
<cpu>はCPU番号
-P ALL 全てのCPUの指定

◼︎ 参考


Be First to Comment

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です