2012-02-15 35 views
4

我在寫一個大量使用http.request方法的應用程序。使用http.request時Nodejs的性能如何擴展?

特別是,我發現同時發送16+〜30kb的請求確實在512MB RAM機器上癱瘓Nodejs實例。

我想知道,如果這是可以預料的,或者,如果是的NodeJS只爲出站請求錯誤的平臺。

+0

請張貼代碼和量化的語句,如「真停滯不前機器」(CPU負載?內存使用情況?文件句柄?)。 – maerics 2012-02-15 18:38:28

+0

我寧願不發佈代碼,但CPU負載掛起30-60%左右,內存使用量約爲700MB虛擬,並且每個作業的開放套接字數量不應超過16個。 – 2012-02-15 19:09:05

回答

1

是的,這個行爲似乎完全合理的。

我會更擔心,如果有人做你沒有任何明顯的系統負載描述的工作(在這種情況下,將需要很長的時間)。請記住,節點只是一個平衡的I/O運行時間,因此您可以相信它正在調度您的I/O請求(大約)與底層系統一樣快,因此它正在使用系統(幾乎)最大的潛力,因此該系統「真正陷入困境」。你應該知道的

+0

我有這樣的感覺,感謝您的澄清! 我假設節點性能應該與服務器成本很好地匹配? :D – 2012-02-15 19:09:49

1

的一件事是事實,http.request不爲每次調用創建一個新的套接字。每個請求都發生在一個名爲「agent」的對象上,該對象包含最多5個套接字池。如果你使用的是v0.6分支,那麼你可以通過使用這個限制。

http.globalAgent.maxSockets = Infinity 

試一下,看看它是否有助於

+0

已經做了,沒有太多的性能提升。 : - /雖然謝謝! – 2012-02-15 19:04:51