2016-12-27 32 views
3

我正在使用Nodejs。我打算增加Nodejs應用程序的內存限制。Nodejs進程能否使用比可用物理內存更多的內存(通過使用交換內存)?

雖然使用谷歌搜索,我發現這篇文章:Increasing Node.js memory limits

作者說他的服務器只有物理內存的8GB,但他的Nodejs進程正在使用內存的28GB。我假定它正在使用physical + swap內存。文章還提到,着名Nodejs框架的開發人員使用15GB內存限制爲他的Nodejs。

我試圖從其他編程語言搜索一些示例。在Java中,似乎對於JVM堆使用交換內存不是一個好主意。參考這篇文章:How increasing swap size allow me to increase the heap size?,對於JVM堆使用交換內存會產生很大的問題。

我不確定JVM GC和Nodejs GC之間是否有任何區別。

Nodejs進程能否使用比可用物理內存更多的內存(通過使用交換內存)?

回答

2

Nodejs進程能否使用比可用物理內存更多的內存(通過使用交換內存)?

是的,它可以。像其他任何過程一樣。它由OS管理。這個過程要求一個新的頁面,它甚至不知道它是否被交換。

但我不會推薦它,因爲它會導致性能下降。磁盤(甚至是SSD)比RAM要慢幾個數量級。就我個人而言,我不喜歡在我的系統上使用任何交換內存。不幸的是,在Linux上這意味着我不能掛起到磁盤,但我可以忍受。

您在檢查內存使用情況時實際看到的內容並不總是那麼明顯。一些共享庫可以同時映射到多個進程,並且您看到的用法並不總是真實的。另外一個進程可以要求大量的內存,但並不意味着它會得到它。第一次實際訪問給定頁面時,而不是在請求頁面時,可以映射真正的物理內存(RAM或交換)。它完成頁面錯誤。

欲瞭解更多信息,請參閱: