【Mac】file table overflowを解決する

こんにちは、フリーランスエンジニアの太田雅昭です。

file table overflow

Nestjsの開発中に、以下のエラーが発生しました。Mac再起動時にエラーメッセージを紛失してしまいましたので、エラーの一部のみです。

... file table overflow ...

原因はNodeではなく、Mac OSのもののようです。

確認

以下のコマンドで、現在のfile descriptorsの設定値を確認できます。

ulimit -a

私の場合、以下の結果でした。

masaaki@Mac-mini ~ % ulimit -a
-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8176
-c: core file size (blocks)         0
-v: address space (kbytes)          unlimited
-l: locked-in-memory size (kbytes)  unlimited
-u: processes                       4000
-n: file descriptors                256

この-nの部分、file descriptorsの値を上げればいいようです。

解決策

/etc/sysctl.confをいじるといいらしい

ChatGPT大先生によれば、/etc/sysctl.confをいじるといいとのことでしたので、早速ファイルを探しに行きました。ですが私のMacOS Sonomaでは、該当ファイルを見つけることができませんでした。/etc/sysctl.dディレクトリも存在しません。

そもそもそうした重要なファイルをいじると、下手すればMacが起動しなくなってしまう恐れもあります。そのためできれば他の方法が望ましいです。

.zshrcをいじった

.zshrcに以下の行を追加しました。

# avoid file table overflow
ulimit -n 512

再度確認してみます。

masaaki@Mac-mini ~ % ulimit -a
-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8176
-c: core file size (blocks)         0
-v: address space (kbytes)          unlimited
-l: locked-in-memory size (kbytes)  unlimited
-u: processes                       4000
-n: file descriptors                512

512に上がっているのを確認できました。