こんにちは。tampopo256です。
普段は教育系のWebサービスを作ったりしています。
Linux系OSで大量ファイル生成アプリを運用してると、ある日突然こんなエラーに出会います。
Too many open files
え、何これ。ちゃんとcloseしてるんだけど?という気持ち、わかります。
でもこれ、システムのせいなんです。まさに「ulimit -n
地獄」の始まり。
ulimit -n
って何者?
Linux系OSには「同時に開けるファイルディスクリプタの数」に制限があります。
それを管理しているのが ulimit -n
。
試しに叩いてみましょう。
$ ulimit -n
1024
出た数字が「1プロセスが同時に開ける最大ファイル数」です。
ファイルだけでなく、ソケットやパイプもカウントされます。
実際の現場:PDF生成ツールが爆発した話
たとえば社内で使っている「clemyのアカウント初期設定PDF自動生成ツール」
生徒ごとに初期パスワードとアカウント設定をPDF化して渡す便利な仕組みですが…
- まとめて大量生成する
- しかも裏で並列処理してる
みたいな状況になると、ある日こうなります。
Too many open files
PDF生成に失敗しました
PDFが空になったり、初期パスワードが消えてたり、最悪の場合は何も出てこないという地獄絵図。
ファイルディスクリプタ(fd)が足りてない、ってわけですね。
対処法:ulimit -n 65535
してみよう
とりあえず一時的に上げたいなら、こう。
ulimit -n 65535
終わりに
社内ツールでも、プロダクションでも、「Too many open files」は他人事じゃないです。
ファイル大量作成や編集系のアプリが急に動かなくなった
まずはulimit -n
を疑ってみるのも一手です。