Open5

Docker コンテナ起動時に発生する `Too many open files` を解消したい

snakasnaka

最近、コンテナ起動時に以下のようなエラーが発生することが多い

Errno::ENFILE: Too many open files in system @ rb_file_s_mtime

または以下のような、ファイルシステムへのアクセスで問題が出ているように見える

file table overflow
snakasnaka

環境

  • OS: macOS 14.6.1(23G93)
  • CPU: Apple M3 Pro
  • Docker:
  Client:
 Version:           27.2.0
 API version:       1.47
 Go version:        go1.21.13
 Git commit:        3ab4256
 Built:             Tue Aug 27 14:14:45 2024
 OS/Arch:           darwin/arm64
 Context:           desktop-linux

Server: Docker Desktop 4.34.2 (167172)
 Engine:
  Version:          27.2.0
  API version:      1.47 (minimum version 1.24)
  Go version:       go1.21.13
  Git commit:       3ab5c7d
  Built:            Tue Aug 27 14:15:41 2024
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.7.20
  GitCommit:        8fc6bcff51318944179630522a095cc9dbf9f353
 runc:
  Version:          1.1.13
  GitCommit:        v1.1.13-0-g58aa920
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
snakasnaka

マウント方法を変更してみる

VirtioFS が選択されていたものを gRPC FUSE に切り替えたら、ある程度安定した

ただ、ベンチマーク取っていないから定かではないがパフォーマンスに影響あるはずなので、他の回避方法があってほしい

snakasnaka

tmp/cache/bootsnap を削除してみる

Docker Volume に配置されているので VirtioFS 関係あるのか不明だが、 bootsnap の処理でエラーが発生するケースが多いようなので、試しに tmp/cache/bootsnap を削除してみる。

docker compose exec app rm -rf tmp/cache/bootsnap

これで幾分安定した気がするが、まだしばらく様子見