2017-04-14 117 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

相關問題