2017-04-14 116 views
1

当我运行负载测试时,我的应用程序在相对较低的压力点下退出。为了测试,我使用这个npm包loadtestNode + Express:导致应用程序退出的loadtest错误:接受ENFILE

我运行测试,每秒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(我不能把它设置在上面)。

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

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

+0

提供有关代码将是一个开始,因为无论运行的机器有多好(或不好),代码中的问题都会导致任何应用程序在最小的负载下崩溃。 – peteb

+0

你是如何得出9999的限制的? – robertklep

+0

@peteb问题不在代码中。它使用10个并发数对测试进行了约400个测试。我只想知道是否有人可以澄清ENFILE错误。 –

回答

3

macOS集合相当低内核限制打开的文件描述符(总数和每个进程)的允许数量。我必须检查我妻子的Mac,并且默认每进程限制为10240,这基本上是针对您仅限于使用ulimitulimit无法超出内核限制的限制)。

可以很容易地增加这些值,但是,在运行sysctl命令:

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

(这些都是我用我的Mac上的价值,他们是相当武断的,但对我的工作没关系)

如果你希望他们在重启后贴,以下两行添加到文件/etc/sysctl.conf(如果还不存在,只是创建它):

kern.maxfiles=122880 
kern.maxfilesperproc=102400 
+0

我也看到这个地方,但我不知道我会修改。这有很大帮助。感谢您对此非常有帮助,队友:D @robertklep –

+0

运行加载测试后,您是否有使用累计节点内存的问题?这是关于您的应用程序的信息?另外,您的机器可以在您的应用程序中处理请求/并发的最大数量是多少? @robertklep –

+0

@SorakthunLy正在积累的内存不一定是件坏事,因为V8会定期运行一个垃圾收集器来清理它。关于并发性,这真的取决于应用程序的准确性。 – robertklep

相关问题