如標題所述,我們有一個 NodeJS 應用程式在 AWS 上的 EC2 執行個體上運行,該應用程式偶爾會耗盡記憶體並終止進程。
從業務角度來看,這並不是真正的障礙,因為冗餘系統可確保另一個執行個體啟動並透過負載平衡器可用。但我們仍然想找出是什麼導致實例記憶體不足,以便我們可以完全阻止它。
我們查看了有關進程終止的日誌,試圖找出發生了什麼,但由於沒有可用內存,作業系統似乎無法在此期間寫入任何日誌。在它殺死進程後,它會記錄它已經抑制了許多日誌,然後像平常一樣繼續。因此,我們假設日誌抑制阻止我們獲得有關問題實際原因的更多資訊。
我們已經嘗試關閉日誌抑制,但在進程無響應期間它仍然不記錄任何內容,只是現在它不報告其抑制的日誌數量。
知道我們如何找出導致進程記憶體不足的原因嗎?
答案1
並殺死該進程。
這第一的你需要做的就是停止記憶體不足。減少主機上的過度使用。
在 /etc/sysctl.d 中新增一個文件,其中包含(最初):
vm.overcommit_memory = 2
vm.overcommit_ratio = 15
然後運行sudo sysctl -p
(您可能希望稍後調整比例)。
然後你就可以開始尋找消耗大量記憶體的東西。