当我对其运行负载测试时,我的应用程序在相对较低的压力点退出。为了测试,我使用这个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,RAM:8GB。
答案 0 :(得分:4)
macOS对允许的打开文件描述符数量(总计和每个进程)设置了相当低的内核限制。我不得不检查我妻子的Mac,并且默认的每个进程限制是10240,这基本上是你使用ulimit
限制的内容(ulimit
不能超出内核施加的限制极限)。
但是,运行sysctl
命令
sudo sysctl kern.maxfiles=122880 kern.maxfilesperproc=102400
(这些是我在Mac上使用的值,它们相当随意,但对我来说还可以。)
如果您希望它们在重新启动后坚持下去,请将以下两行添加到文件/etc/sysctl.conf
(如果它尚不存在,只需创建它):
kern.maxfiles=122880
kern.maxfilesperproc=102400