メモメモメモ

ほんとうにめも

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とあるので、文字通り「書き込み可能な領域が足りないのかな」的に万全と思っていた。

原因調査手順

  1. df -hの結果は以下のようになって、容量は空いているそうだった。 (※/dev/xvda1がディスクの容量を表してるらしい) f:id:yooska14:20200204173802p:plain

  2. ディスクに空きがあるなら、 inodeが枯渇してる可能性があると言われた。 inodeの空き状況を見るにはdf -iを実行すれば良いそうだった。 すると、以下のようにInodesIUsedの値がほぼ同じで、ほぼ容量がないようだった。 f:id:yooska14:20200204174040p:plain

原因調査結論

inodeが枯渇している。これが原因だった。

inodeとは

inodeとは、LinuxUnix系のOS全般)がファイルのメタ情報を管理するためのデータ。

解決した方法

実際に取った方法(即効性あり)

運用してる本番プロジェクトとは別で、不要なファイルがいっぱいあったのでそれを全部削除した。

近い将来やる方法(ちょっと大変)

session情報の管理をファイルではなくredisなど、別サーバで管理する。

感謝

AWSのビジネスサポートに問い合わせたら原因調査から解決指南までやってくれた。 月10,000の価値は大いにある。 自分はインフラの専門家じゃないので安心感ある。