リリース後などの監視の際によく使うコマンド(Linux)

他の会社の事はよくわからないのですが、自分が働いている会社ではよく監視をします。
パソコンの前に張りついて、有事の際に対応出来るように。。
 
会社的にはMRTG(http://www.mrtg.jp/doc/)でイロイロ見れるようになっていますが、
他にもチョコチョココンソール叩いて確認とかしてて。監視の時何してんですか?
とか聞かれて毎回説明するのもアレなので使ってるLinuxのコマンドを記載しておきやす。
#Solarisとか試してないですが、ほとんど使えると思います。昔prstatとか使ってたなぁ。
——————————-
■ top
——————————-

Tasks: 254 total,   1 running, 253 sleeping,   0 stopped,   0 zombie
Cpu(s):  2.8%us,  2.9%sy,  1.0%ni, 91.9%id,  1.5%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   2050468k total,  1534072k used,   516396k free,   311684k buffers
Swap:  3229028k total,        0k used,  3229028k free,   502612k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
  992 root      20   0 89240  36m  11m S    8  1.8  26:41.94 /usr/bin/X :0 -nr -verbose -auth /var/run/gdm/auth-for-gdm-QK7CO0/database -nolisten tcp vt7
 1727 eshinoha  20   0  163m  57m  13m S    3  2.9   4:05.84 gnome-terminal
 1810 eshinoha  20   0  516m 202m  32m S    3 10.1  31:13.08 /usr/lib/firefox-3.6.13/firefox-bin

↑こんなヤツ。
実行中に c で、COMMANDがドヤっと出てくるので実行時の引数とかで判別出来るように
なってたりすると便利です。
自分はスレッドをよく使うJavaなプロジェクトに携わることが多いので、
コマンドたたいてから H(Shift+h) するとスレッドごとのが出てきて、それも便利です。
 
——————————-
■ ps
——————————-

$ ps -ef | grep apache
root      1453     1  0 07:00 ?        00:00:01 /usr/sbin/apache2 -k start
www-data  1463  1453  0 07:00 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  1464  1453  0 07:00 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  1465  1453  0 07:00 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  1466  1453  0 07:00 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  1468  1453  0 07:00 ?        00:00:00 /usr/sbin/apache2 -k start
1000      5759  5604  0 20:41 pts/82   00:00:00 grep --color=auto apache

上記はapacheのプロセスどうなってるだろ~?とかって時に使います。
自分はJavaでJVMに渡した引数とか大丈夫かな?とか見たりします。
また、上述したtopコマンドで気になったら ps -ef | grep プロセス番号 とか。
 
——————————- 
■ vmstat
——————————-

$ vmstat 10
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0  43560 679636  81416 999320    0    0     0    15    0    0  1  0 99  0
 0  0  43560 675396  81428 999540    0    0     0   116  830 3431  3  0 97  0
 0  0  43560 675024  81444 999792    0    0     0   114  776 3357  3  0 97  0

情報を取得する周期を引数に与えてあげます。
swapしてるかどうかが重要で、siとかsoとかバンバン出まくってきたら要注意です。。
最初の1発目は参考値的に。2行目から見る感じで。
 
——————————-
■ free
——————————-

$ free
             total       used       free     shared    buffers     cached
Mem:       4059000    3412644     646356          0      81708    1008672
-/+ buffers/cache:    2322264    1736736
Swap:      4192944      43560    4149384

もうちょっとサクっとみたいなって時は、コレとか便利です。
-kでキロバイト、-mでメガバイト、-gでギガバイト単位で出力できます。
 
——————————-
■ pidstat
——————————-

$ pidstat -r -p 30782 -p 31170 -p 30841 -p 31207
Linux 2.6.26-2-amd64 (hogehoge) 	06/01/2011 	_x86_64_

08:33:02 PM       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
08:33:02 PM     30782      0.00      0.00  848112 518316  12.77  java
08:33:02 PM     31170      0.00      0.00  850448 566556  13.96  java
08:33:02 PM     30841      0.00      0.00  887516 558492  13.76  java
08:33:02 PM     31207      0.00      0.00  858816 580272  14.30  java

該当のプロセスがどんな風にメモリを使ってるのかトレースするのに便利です。
なぜか数学者にはワイン好きが多いな人に教えてもらいました。
 
——————————-
■ jstat
——————————-

$ /usr/local/jdk/bin/jstat -gc 30782 3000
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT
3008.0 3072.0 2160.0  0.0   168576.0 139478.2  349568.0   198787.8  33728.0 33696.5    288    1.510   0      0.000    1.510
3008.0 3072.0 2160.0  0.0   168576.0 164795.2  349568.0   198787.8  33728.0 33696.5    288    1.510   0      0.000    1.510
2944.0 3072.0  0.0   1664.0 168576.0 14006.6   349568.0   199052.2  33728.0 33696.5    289    1.519   0      0.000    1.519

これはJavaのコマンドなのですが、jstat -gc の後に、プロセス番号と取得する周期(ミリ秒)で
左から右にいくにつれて、若いGCから古いGCがトレースできます。
FGCがやけに短い期間にバンバン実施されてしまっていたら要注意です。
 
——————————-
■ jmap
——————————-

$ /usr/local/jdk/bin/jmap -histo 30782 | more

 num     #instances         #bytes  class name
----------------------------------------------
   1:        458035       72948264  [C
   2:         32160       35404808  [B
   3:        418982       20111136  java.util.concurrent.locks.ReentrantLock$NonfairSync
   4:        418960       20110080  java.util.concurrent.ConcurrentHashMap$Segment
   5:        407461       16298440  java.lang.String
   6:        418981       13516864  [Ljava.util.concurrent.ConcurrentHashMap$HashEntry;
   7:        134497       13506952  [Ljava.lang.Object;

こちらもJavaのコマンドになります。jmap -histo プロセス番号で、
どんなクラスがどんだけ使われてるか?というのが取得できます。
ただし、素で叩くとドヤっと出すぎてしまい、見たいのは上位だけって感じだと思うので、
パイプでmoreしてやって、必要なのだけ見る感じでイイのかなと思います。
 
 
コレ系の作業は熟練の職人みたいな方達がいらっしゃると思うので、
そういう人の隣で目で盗むみたいな事とかやってみたいなぁw
 

【改訂新版】 Linuxコマンド ポケットリファレンス (Pocket Reference)
沓名 亮典 平山 智恵
技術評論社
売り上げランキング: 51061

コメント

タイトルとURLをコピーしました