Node + Express: loadtest causing the application to quit with Error: accept ENFILE
Node + Express: loadtest causing the application to quit with Error: accept ENFILE
当我 运行 对它进行负载测试时,我的应用程序在相对较低的压力点退出。为了测试,我使用了这个 npm 包 loadtest。
我运行测试每秒1000个请求,10个并发,持续10秒。
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(我不能设置超过那个)。
该应用程序可以在 10 个并发时处理大约 400rps。
我的本地机器是 Mac OS Sierra,CPU:1.6GHz,内存:8GB。
macOS 对允许的打开文件描述符数量(总数和每个进程)设置了相当低的 kernel 限制。我不得不检查我妻子的 Mac,默认的每个进程限制是 10240,这基本上是你被限制使用 ulimit
的地方( ulimit
不能超出内核施加的限制)。
增加这些值很容易,但是,运行 sysctl
命令:
sudo sysctl kern.maxfiles=122880 kern.maxfilesperproc=102400
(这些是我在 Mac 上使用的值,它们相当随意但对我来说没问题)
如果您希望它们在重启后保持不变,请将以下两行添加到文件 /etc/sysctl.conf
(如果尚不存在,请创建它):
kern.maxfiles=122880
kern.maxfilesperproc=102400
当我 运行 对它进行负载测试时,我的应用程序在相对较低的压力点退出。为了测试,我使用了这个 npm 包 loadtest。
我运行测试每秒1000个请求,10个并发,持续10秒。
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(我不能设置超过那个)。
该应用程序可以在 10 个并发时处理大约 400rps。
我的本地机器是 Mac OS Sierra,CPU:1.6GHz,内存:8GB。
macOS 对允许的打开文件描述符数量(总数和每个进程)设置了相当低的 kernel 限制。我不得不检查我妻子的 Mac,默认的每个进程限制是 10240,这基本上是你被限制使用 ulimit
的地方( ulimit
不能超出内核施加的限制)。
增加这些值很容易,但是,运行 sysctl
命令:
sudo sysctl kern.maxfiles=122880 kern.maxfilesperproc=102400
(这些是我在 Mac 上使用的值,它们相当随意但对我来说没问题)
如果您希望它们在重启后保持不变,请将以下两行添加到文件 /etc/sysctl.conf
(如果尚不存在,请创建它):
kern.maxfiles=122880
kern.maxfilesperproc=102400