SadServers #1
Scenario:"Saint John": what is writing to this log file?(このログファイルは何が書かれていますか?)
Description:A developer created a testing program that is continuously writing to a log file /var/log/bad.log and filling up disk. You can check for example with tail -f /var/log/bad.log
.This program is no longer needed. Find it and terminate it.(ある開発者が作成したテスト・プログラムが、ログファイル/var/log/bad.logに書き込み続け、ディスクをいっぱいにしている。もう必要ないので終了させてください。)
答えにたどり着くまで
/var/log/bad.log
↑そのファイルを開いているプロセスを探す
$ lsof /var/log/bad.log
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
badlog.py 585 admin 3w REG 259,1 35833 265802 /var/log/bad.log
$
lsofコマンドとは
プロセスが開いているファイルを表示するコマンド
サーバーで特定のポート番号を待ち受けているかどうか、指定ファイルは誰が読み込んでいるのかを調べたいときに役立つコマンド
特定のファイルを開いているプロセスを特定するとPIDが585だった。
badlog.py 585 admin 3w REG 259,1 35833 265802 /var/log/bad.log
さっきのPIDからプロセス名と情報を見てみる
$ ps aux | grep 585
admin 585 0.0 1.7 12508 8192 ? S 10:54 0:00 /usr/bin/python3 /home/admin/badlog.py
admin 889 0.0 0.1 5264 640 pts/1 S<+ 11:00 0:00 grep 585
$
ps aux | grep は、OS上で動いてるプロセスを確認するときに使用する
そもそもなんでps aux|grep と叩くとプロセスIDとかの出力結果出るか調べる
ps aux
ps単体がLinux上で動いてるプロセスを確認するコマンドでもps単体であんまり使わんからps auxで覚えとこ。
grep
hoge.txt
hoge
itigo
hogehoge
oishii
みたいなファイルがあってgrep hoge hoge.txt打つと
grep hoge hoge.txt
hoge #検索結果1
hogehoge #検索結果2
- 第1引数のhogeが検索単語
- 第2引数のhoge.txtが後述する標準入力
- 出力結果が後述する標準出力
パイプライン(|)の意味
パイプラインというのは、前のコマンドの標準出力をそのまま次のコマンドの標準入力として渡す仕組みのこと
ps aux|grep hogeコマンドを叩くとすると
- ps auxでOS上で実行中のプロセスが一覧として表示され、標準出力される
- grep hogeの標準入力として、1.で標準出力されたプロセスの一覧が渡される
- 結果として、OS上で実行中のプロセスの中で、nodeという文字列を含んだプロセスが標準出力としてコマンドライン上に表示される
$ ps aux | grep 585
admin 585 0.0 1.7 12508 8192 ? S 10:54 0:00 /usr/bin/python3 /home/admin/badlog.py
admin 889 0.0 0.1 5264 640 pts/1 S<+ 11:00 0:00 grep 585
$
左から
- USER:プロセスの所有ユーザー
- PID:プロセス番号
- %CPU:CPUの占有率
- %MEM:実メモリでの占有率
- VSZ:仮想分も含めた使用サイズ(Kバイト)
- RSS:実メモリ上の使用サイズ(Kバイト)
- TT:端末名
- STAT:プロセスの状態
- R:稼動中
- S:一時停止中
- D:停止不可能で一時停止
- T:終了処理中
- Z:ゾンビプロセス(すでに実体は無い)
- W:実メモリ上に無くて,スワップアウトしている
- N:nice値
- STARTED:プロセスの開始時刻
- TIME:プロセスの総実行時間
- COMMAND:実行コマンド名とパス(シェル表記の場合もあり)
admin 585 0.0 1.7 12508 8192 ? S 10:54 0:00 /usr/bin/python3 /home/admin/badlog.py
kill 585してやることでログ・ファイルの書き込みが停止して、ディスクの容量の消費も止まる。
まとめ
SREは障害対応のスキルもいるのでこれからSadSeversの問題解いて行って勉強していく。