LoginSignup
1
0

More than 5 years have passed since last update.

supervisorのファイルディスクリプタの上限を変更する方法

Posted at
Too many open files

ファイルディスクリプタの上限に引っかかって上記のようなエラーが起きることがあります。
ここでは、supervisorのファイルディスクリプタの上限を変更する方法を紹介します。
supervisorから起動しているプロセスのファイルディスクリプタの上限も同時に変更されます。

前提

$ lsb_release -d
Description:    Ubuntu 18.04.2 LTS
$ supervisord -v
3.3.1
$ systemd --version
systemd 237
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN -PCRE2 default-hierarchy=hybrid

変更前

supervisorのファイルディスクリプタ
$ cat /proc/[process id]/limits | grep "Max open files"
Max open files            1024                 4096                 files  
supervisorから起動しているプロセスのファイルディスクリプタ
$ cat /proc/[process id]/limits | grep "Max open files"
Max open files            1024                 4096                 files  

Soft Limitが1024、Hard Limitが4096になっている。

変更手順

supervisorを起動しているのがsystemd。
systemdのsupervisor設定を変更する。

/lib/systemd/system/supervisor.service
[Service]
LimitNOFILE=16384

設定の再読み込み&supervisor再起動。

$ sudo systemctl daemon-reload
$ sudo systemctl restart supervisor

変更後

supervisorのファイルディスクリプタ
$ cat /proc/[process id]/limits | grep "Max open files"
Max open files            16384                16384                files     
supervisorから起動しているプロセスのファイルディスクリプタ
$ cat /proc/[process id]/limits | grep "Max open files"
Max open files            16384                16384                files     

Soft LimitとHard Limitが変更した値になっている。

プロセス内で上限を設定する例

EventMachineを使用した例

EM.set_descriptor_table_size(2048)
supervisorから起動しているプロセスのファイルディスクリプタ
$ cat /proc/[process id]/limits | grep "Max open files"
Max open files            2048                 16384                files  

Soft Limitが変更される。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0