読者です 読者をやめる 読者になる 読者になる

woshidan's blog

そんなことよりコードにダイブ。

サーバーのプロセスの状況を見たりするLinuxコマンド

rmagickを使って遊んで記事にしようと思ったのですが、参考にしていた記事とあまりにも一緒になったのでやめましたおすし。

 

少し前に勉強したLinuxのコマンドをいくつか。

ssh

Linuxコマンド【 ssh 】リモートマシンにSSHでログイン - Linux入門 - Webkaru

サーバの状況を見る前にそもそもサーバに接続する必要がある。

ssh [オプション] 接続先のホスト名 [接続先でやりたいコマンド]

の順に記入する。

オプションには、
-i 秘密鍵ファイル
秘密鍵ファイルを指定

ssh -i ~/.ssh/id_rsa aaa.bbb.ccc.ddd // id_rsaなのはsshバージョン2らしい

秘密鍵ssh-keygenで作成。

-p ポート番号
ポート番号を指定

-l ユーザ名
ログインユーザ名を指定

がある。

 

また、コマンドを実行する例

ssh aaa.bbb.ccc.ddd ls

ps aux

Linuxコマンド集 - 【 ps 】 実行中のプロセスを表示する:ITpro

psが現在実行されているプロセスを知るためのコマンド。
ps auxまで入力することが多いですが、
ps [オプション]
の形式で

  • a 自分以外のユーザーのプロセスも表示する
  • u ユーザ名と開始時刻を表示する
  • x 制御端末のないプロセスの情報も表示する

となる。
制御端末のないプロセス、の意味がちょっと分からないので、後

http://www.race.u-tokyo.ac.jp/~moro/unix-programmer/faq-j_2.html

あたりでも読んでみたい。

 

これで、どんなプロセスが動いているか確認できる。
nginxとかRackApp::..とかがwebサーバーのプロセスらしい。

%CPU(cpu使用率) %MEM(実メモリ占有率)
の項を見ると、現在プロセスがサーバ上の資源をどれくらい使っているのか、が大体分かる。

これから、%MEMの合計値が高すぎピンチ、とか、
異様に1個プロセス大きい、なんだ、とか、大体全体でどれくらいの占有率か、
どんなプロセスの種類があるか、ということが分かる。

free

Linuxコマンド集 - 【 free 】 メモリーの使用状況を表示する:ITpro

http://open-groove.net/linux-command/free/

freeはメモリの使用状況を確認するコマンド。

元になっているファイルは、 /proc/meminfoで
cat /proc/meminfoでmeminfoの内容を整形して出すのがfree。

linucは空きメモリがあると自動的にキャッシュに割り振っていくそうなので、
メモリの空き容量を見るには、2行目の -/+ buffers/cacheのfreeの列の値を見ればいいことになる。

http://www.softel.co.jp/blogs/tech/archives/2192

からそのまま例の値を拝借させていただいて、

$ free
total used free shared buffers cached
Mem: 510532 301568 208964 0 56756 141376
-/+ buffers/cache: 103436 407096
Swap: 2048276 0 2048276

この場合だと、407096Byteとなる。
アプリケーションが純粋に使用している(キャッシュ等表のところでやり取りしているデータの)容量は2行目のusedの方。
Swapはusedが多いと問題か。

buffersはブロックデバイス用のキャッシュのメモリ、cachedはファイルに対するキャッシュのメモリにあたる。

しばしばfree -m と表記されるが、
-mはオプションで容量をMバイト単位で表記する、という意味。

-k, -bが容量をKバイト単位、バイト単位で表示
-s 秒数 が指定した秒間隔で表示する
-t 物理メモリーとスワップ・メモリーの合計も表示する、となる。

vmstat

真打ち(個人の感想です)。
vmstatはシステム内の情報を表示するコマンドだ。例えば,主メモリーの空き容量やCPUの動作状況などを表示する。
実を言うと、上のメモリの使用量だけを見ていてもps auxでMEM%の合計値がやばい、など大体の所しか分からないらしい。

メモリに余裕があるときは、システムもたくさんキャッシュを取ったりしてメモリをたくさん使うふうになっていて
なんか稼働時より非稼働時のほうが1プロセス辺り2倍もMEMが増えてる、なんで!?ということも言ったけど、
それはむしろよくあることなのかも。

本当に問題かどうかはvmstatコマンドの結果を見るのが分かりやすそう。

使い方は

vmstat [オプション] [時間間隔]


オプション
-f fork数を表示する(実はfork数を見て何を判断したらいいのかよく分からない)
オプションのほうは実はよくわからないけど、時間間隔を指定して、
動かしながら、一定時間ごとに更新表示させたりすると、
ああ、このプロセスのときがやばいんだ、と分かりやすそう。

分かりやすそう、とか書きながらどう見るのか書いてないんだけど。

Fulldigit - vmstatコマンドとか

vmstatの見方と考え方:ぴろにっき:So-netブログとか。

出る項目は
procs(r,b),memory(swpd,free,buff,cache),swap(si,sp),io(bi,bo),system(in,cs),cpu(us,sy,id,wa)

自分のマシンはmacなので……(圧倒的にわか感)

案の定把握しきれなかったから、特に注意が必要そうな項目だけメモ。

procs r,b
r: CPUへのアクセスを待っているプロセスの数
b: 入出力待ちでスリープ状態にされているプロセス数
平時は0~2,3を行き来。常にbの値が高い場合は、ディスクの性能か、想定以上にディスクIOが多い。
データベースへのアクセスとか。

swap, si/so
si ディスクからスワップインしたディスクメモリの量
so ディスクにスワップアウトしたディスクのメモリの量
(※ちょっと忘れていたのでorz
スワップイン(ハードディスクから物理メモリに戻って来ること)
スワップアウト(物理メモリからハードディスクへ帰ってくること))
これが高い場合は、物理メモリが足りていないか、データの読み込みの手順が悪すぎる。

cpu id
CPUのアイドル率(%).
安定したシステムなら90%以上のアイドル率があるらしい。

 

後、topでload averageがプロセッサの数と比べてどうかとか。

【 top 】 現在のシステム状況を表示する:ITpro

 

理解度は置いておいて黒い画面がちょっと怖くなくなった感じだ。