2015-07-20 48 views
0

我有2個環境:一個是處理每週進程的咕嚕環境,這個進程將進入現場生產數據庫。另一個是帶有生產數據庫的實時應用程序本身。運行Node.js(在Windows R2服務器上):如何減少我的咕嚕任務消耗的RAM數量?

我最近在Grunt中進行了一些優化,以更好的方式處理和存儲數據,從而實現了更快的應用程序和更好的整體用戶體驗。我的問題是,我在每週生產過程中進行的處理耗費大量內存,並且需要大約10個小時。我確定需要10個小時,但我的問題是內存使用率高達95%左右,實時應用程序的響應時間開始爬行,直到咕嚕聲過程完成時纔有響應。

我的問題是......沒有增加額外的內存(現在是8GB),我該如何讓Grunt在不影響用戶體驗的情況下運行這個過程?感謝您提供的任何建議。

回答

1

我認爲這裏的「正確」答案是使用另一臺機器。您不應該在爲您的生產網站提供服務的同一臺計算機上運行批量處理任務,因爲這個確切原因–他們傾向於消耗所有可用資源,而不會爲您的Web服務器留下任何餘量。


如果—無論出於何種原因—另一臺機器是不是一種選擇,那麼你需要診斷爲什麼您的批量任務會消耗這麼多的內存。 node-inspectormemwatch是開始的好地方。這些將允許您檢查JavaScript堆以查看內存中的內容。

然而,JS堆通常僅限於某處1和1.9 GB(取決於節點版本),因此,如果您的批量任務是使用不止這些,有幾種可能性之間:

  1. 有涉及多個節點子進程。
  2. 你的節點進程正在JS堆外分配大量內存。這通常意味着你有很多(和/或一些非常大的)Buffer s沒有被處置。
  3. 您可能正在使用泄漏內存的本地(C++)模塊。