Apache Benchを使っていたら以下のエラーに直面。
1 2 |
# ab -c 1100 -n 2000 https://example.com/ socket: Too many open files (24) |
オープンできるファイル数(というか使用できるファイルディスクリプタ数)に制限があるのだろうか。調べてみるとulimitというコマンドが見つかった。このコマンドを使うとシステムリソースの現在の上限値を知ることができる他、上限値を変更することもできるらしい。
現在のシステムリソースの上限を表示する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 15539 max locked memory (kbytes, -l) 16384 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 15539 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited |
オープンできるファイル数の上限を変更する。
1 |
$ ulimit -n 2048 |
設定を変更したらApache Benchのエラーが消えた。
参考サイト
【 ulimit 】 コマンドに割り当てる資源を制限する | 日経 xTECH(クロステック)
https://tech.nikkeibp.co.jp/it/article/COLUMN/20060227/230911/
Using the ulimit command on Linux systems | Network World
https://www.networkworld.com/article/2693414/setting-limits-with-ulimit.html