Node + Express:导致应用程序退出的loadtest错误:接受ENFILE

当我运行负载testing时,我的应用程序在相对较低的压力点下退出。 为了testing,我使用这个npm包载入testing。

我以每秒1000个请求的速度运行10个并发10秒的testing。

loadtest http://localhost:3000/my/api -t 10 -c 10 --rps 1000 

大约两秒钟后应用程序退出,并给出以下错误,这是不是很有用。

 events.js:163 throw er; // Unhandled 'error' event ^ Error: accept ENFILE at exports._errnoException (util.js:1050:11) at TCP.onconnection (net.js:1462:24) 

显然,这与打开文件的数量有关。 我试过这个命令ulimit -n <number>但它没有帮助。 这是限制在9999(我不能把它设置在上面)。

该应用程序可以处理大约400rps的10个并发货币。

我的本地机器是Mac OS Sierra,CPU:1.6GHz,RAM:8GB。

macOS对打开的文件描述符(总共和每个进程)允许的数量设置了相当低的内核限制。 我必须检查我妻子的Mac,默认的每进程限制是10240,这基本上是限制使用ulimitulimit不能超越内核限制)的限制。

运行sysctl命令很容易增加这些值:

 sudo sysctl kern.maxfiles=122880 kern.maxfilesperproc=102400 

(这些是我在Mac上使用的价值,他们是相当武断的,但对我来说工作还可以)

如果你想让它们在重启之后继续运行,把下面两行添加到/etc/sysctl.conf (如果它还不存在,只需创build它):

 kern.maxfiles=122880 kern.maxfilesperproc=102400