2013-06-03 108 views
1

我開始使用NodeJS的Web應用程序,並且我的應用程序有一個問題,我不知道如何解決。NodeJS負載測試性能不佳(EADDRNOTAVAIL)

應用程序(我們使用expressjs)運行流暢我的本地機器,但是,當我們把它部署到我們的負載測試開發服務器上,我們得到了如下的錯誤

Error: connect EADDRNOTAVAIL at errnoException (net.js:770:11) at connect (net.js:646:19) at Socket.connect (net.js:711:9) at asyncCallback (dns.js:68:16) at Object.onanswer [as oncomplete] (dns.js:121:9) GET XXXXXXX 500 21ms

我們應用程序沒有數據庫,它處理Rest API後端。我們構建的每個頁面都需要對我們的後端進行一次或多次調用。我知道我們必須使用緩存系統,但我們想要在沒有它的情況下進行測試。

我們的負載測試模擬用戶導航。它從5個用戶開始,每分鐘添加一個用戶。當我們有超過25個用戶時,我們開始看到我們日誌中的錯誤。

在開始時我認爲這可能是一個問題,關於太多的開放連接,但我們的系統管理員說,情況並非如此。

所以,如果有人能夠給我一個關於我應該在哪裏看的提示,那將是非常棒的。

編輯:我們的開發機器有16個內核,我們運行我們的應用程序使用集羣模塊。呼叫到後端處理與流行的Mikael的請求模塊。

+0

可能問題是與REST後端?儘管如此,很難說沒有關於如何調用後端的一些想法。 – robertklep

+0

它似乎不是後端問題,因爲我們已經測試了它(使用JUnit)並且沒有問題。我們使用Mikael請求模塊來調用我們的後端。 – PaquitoSoft

+1

我是由'GET XXX 500'消息觸發的,但我想這是由你自己的應用引起的:)查看[本頁](http://www.toptip.ca/2010/02/linux-eaddrnotavail-address -not.html)查看EADDRNOTAVAIL是否不是由於端口用盡而引起的。 – robertklep

回答

2

正如robertklep所說,這是SO打開太多傳出連接時耗盡虛擬端口的問題。請按照他的link獲取詳細解釋。

當我增加端口,因爲文章說我仍然有問題。隨着更多的Google搜索,我發現了垃圾收集器和節點網絡對象的問題。這似乎是一個好主意(當你需要許多傳出連接時)手動處理垃圾收集器。 看看這個post

0

如果你確保它不是一個程序問題,您可以更改Linux系統配置來解決這個問題:

[XXX @ XXX〜] $ VIM的/etc/sysctl.conf

網.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

[XXX XXX @〜] $的sysctl -p