macでApache Benchで「socket: Too many open files (24)」エラー

サクッと負荷がかけられるApache Benchをmacから実行したらエラーが出たのでその辺を記述します。

まずは環境です。
MacbookPro OS X Yosemite 10.10.3 ※2015/5/29現在で最新

Apache Benchを実行すると「socket: Too many open files (24)」とエラー。

$ ab -n 500 -c 500 http://****.com/<strong><em>/</em></strong>.php
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking ****.com (be patient)
socket: Too many open files (24)

システムリソースの上限を設定できるulimitコマンドが鍵のようです。

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 256            ←コレ
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 709
virtual memory          (kbytes, -v) unlimited

open filesをとりあえず1000に設定

$ ulimit -n 1000

確認

$ ulimit -n
1000

注意。(これが一番書きたかったこと)

mac Yosemiteだとターミナル立ち上げて1回目は設定できるのですが、なぜか2回目以降は設定値より小さい値しか設定できません。

$ ulimit -n 1
$ ulimit -n
1
$ ulimit -n 100
-bash: ulimit: open files: cannot modify limit: Operation not permitted

上記のように1なんて設定したらもとに戻せません。ただ、その場合は新しいターミナルを起動しなおせば再設定できます。
ulimitはログインShellにひも付けられる設定値ということですね。
しかし、2回目から設定できないのは謎。


Article written by

Please comment with your real name using good manners.

Leave a Reply