Laravelで "failed to open stream: No space left on device"エラーが頻発していた
状況
- Laravel製プロジェクトを本番運用している。
{ "class": "ErrorException", "message": "file_put_contents(\/home\/path_to_project\/storage\/framework\/sessions\/hogehoge): failed to open stream: No space left on device", "code": 0, "file": ...
のようなエラーが発生している。
原因調査
No space left on device
とあるので、文字通り「書き込み可能な領域が足りないのかな」的に万全と思っていた。
原因調査手順
df -h
の結果は以下のようになって、容量は空いているそうだった。 (※/dev/xvda1がディスクの容量を表してるらしい)ディスクに空きがあるなら、 inodeが枯渇してる可能性があると言われた。 inodeの空き状況を見るには
df -i
を実行すれば良いそうだった。 すると、以下のようにInodesとIUsedの値がほぼ同じで、ほぼ容量がないようだった。
原因調査結論
inodeが枯渇している。これが原因だった。
inodeとは
inodeとは、Linux(Unix系のOS全般)がファイルのメタ情報を管理するためのデータ。
解決した方法
実際に取った方法(即効性あり)
運用してる本番プロジェクトとは別で、不要なファイルがいっぱいあったのでそれを全部削除した。
近い将来やる方法(ちょっと大変)
session情報の管理をファイルではなくredisなど、別サーバで管理する。
感謝
AWSのビジネスサポートに問い合わせたら原因調査から解決指南までやってくれた。 月10,000の価値は大いにある。 自分はインフラの専門家じゃないので安心感ある。