2016年8月10日水曜日

nginxのせいでDisk Fullになってアクセス不能になった件

正直恥ずかしい話ですし、Disk監視ちゃんと入れておけば防げる話です。

AWSのEC2でnginx動かしていたら、Disk使用率が100%になってレスポンスが返せなくなりました。
原因はnginxが巨大なログファイルを出力していたためなのですが、
dfだとdiskが喰われているのに、/に移動してdu -sh *でディレクトリごとの使用量を見てみても、
どこがdiskを喰っているのかわかりませんでした。

そこで何かのプロセスがファイルをつかんでいるだろうと調べたところ、nginxが巨大なログファイルをつかんでいました。
なぜそれがduでわからなかったかというと、実際のファイルは存在していなかったからです。
nginxの起動ユーザーはec2-userになっていたのですが、nginxはyumでインストールしたものなので、
log出力先のディレクトリのオーナーがnginxユーザーになっており、
ログがローテーとするタイミングで実ファイルへの書き込みができなくなっていて、
その存在しないファイルにずっと出力が続けられていて、ディスクを喰っていた感じです。

まずnginxのプロセスを調べました。
$ps -ef|grep nginx
root      2258     1  0  2015 ?        00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
ec2-user  2259  2258  0  2015 ?        01:06:48 nginx: worker process
ec2-user  2260  2258  0  2015 ?        01:06:14 nginx: worker process
ec2-user  4949  4810  0 22:31 pts/0    00:00:00 grep nginx

プロセスIDが2259が開いているファイルを調べたところ、deletedな巨大なaccess.logが見つかりました。
$sudo lsof -p 2259
COMMAND  PID     USER   FD   TYPE             DEVICE   SIZE/OFF   NODE NAME
nginx   2259 ec2-user    2w   REG              202,1     175662 275456 /var/log/nginx/error.log-20150528 (deleted)
nginx   2259 ec2-user    4w   REG              202,1     175662 275456 /var/log/nginx/error.log-20150528 (deleted)
nginx   2259 ec2-user    5w   REG              202,1 5977988117 275453 /var/log/nginx/access.log-20150528 (deleted)
nginxを再起動すると、diskの空きが増えて、またレスポンスが返せるようになりました。

0 件のコメント:

コメントを投稿