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,这基本上是限制使用ulimit
( ulimit
不能超越内核限制)的限制。
运行sysctl
命令很容易增加这些值:
sudo sysctl kern.maxfiles=122880 kern.maxfilesperproc=102400
(这些是我在Mac上使用的价值,他们是相当武断的,但对我来说工作还可以)
如果你想让它们在重启之后继续运行,把下面两行添加到/etc/sysctl.conf
(如果它还不存在,只需创build它):
kern.maxfiles=122880 kern.maxfilesperproc=102400