ページコンテンツ
概要
ある時、ふと /root 直下で
ls -lga
を実行すると、大量の「 .attach_pidXXX (XXXは数字。三桁とは限らない。)」というファイルが存在していた。
しかも、徐々に増えていることがわかった。
これについて、原因調査と対応を行った。
現状整理
原因らしきものが分からなかったため、とりあえずわかっていることを整理した。
- .attach_pidXXX のsizeは0。
- 定期的に生成されているが、同じ単位時間あたりに生成されているわけではない。ただし、いつも生成時間が5分単位だった。
- 全部削除しても、また一定時間経つと生成されている。
- 生成されているのは、 /root 直下のみ。
- 同じ使い方をしているサーバが複数あるが、その症状が出ているのは、1サーバのみ。
webの情報を集めてみる
webで「attach_pid」について調べると、以下のような情報があった。
- 何か通信を実施する時に処理を行うフラグ的なものとして生成されるといった記述があったが、詳細は分からず。
- javaのあるバージョンの不具合で大量に生成されるケースがある。
サーバ上のプロセスを見ると、javaが動いているのが確認できたので、javaのバージョンアップを実施するてもあったが、それによりどのような影響がでるか予想がつかなかったので、実施しなかった。
原因はAWS関連のモジュールだった
ファイルの生成時間を見た時に、必ずx0かx5で生成された。
ということは、5分単位で実行されている何らかの処理が原因だと思った。
そこで気づいたのが、cronにて5分ごとにcloudwatchへのカスタムメトリックスを送っている処理があったことだった。
このために「 mon-put-data 」というのを使っていた。
- これが、javaで書かれているのかも?
- 該当サーバだけ、上のjavaの不具合があるバージョンなのかも?もしくは実行環境が該当のバージョンなのかも?
mon-put-data はだいぶ前に設定したもので、今はもっと使いやすくなっているので、今よく使っているaws cliに変更する。
cloudwatchへの送信処理を変更
例えば、load avarageをcloudwatchに送っていたが、以下のようにやっていた。
loadave1=`uptime | tr -s ' ' | sed -e "s/.*load average:/load average:/g" | cut -d ' ' -f 3 | cut -d ',' -f 1`
mon-put-data --metric-name "LoadAverage" --namespace "Custom Metrix" --dimensions "InstanceId=$instanceid" --value "$loadave1" --unit "Count"
mon-put-dataは、
mon-put-data --metric-name "(メトリクス名)" --namespace "(名前空間)" --dimensions "InstanceId=(インスタンスID)" --value "(値)" --unit "(値の単位)"
となるが、aws cliに変更した場合
aws cloudwatch put-metric-data --namespace "(名前空間)" --metric-name "(メトリクス名)" --dimensions InstanceId=(インデックスID) --value (値) --unit (単位)
となる。
ダブルクォーテーションを使ったり使わなかったりしているが、本当は全部いらないかも。
(ダブルクォーテーションがいるかどうかの調査は省略した)
これで数日様子を見たところ、.attach_pidXXXはでなくなっていた。
かつ、cloudwatchへのカスタムメトリックスの送信は正常に行えていた。
最後に
結局はAWSのモジュールを変更したことで解決したが、もしかしたらjavaのバージョンアップでも解決したかも。
JAVA(JRE)のバージョンとか、細かく見ていたら、もっと原因をちゃんと把握できたかも。