Linux
為什麼我不想啟用交換?
我最近遇到了一個問題,流氓程序導致一些 ec2 實例記憶體不足並崩潰。這可能不應該是一個問題,除非我使用的是 t2.small 實例,這些實例的記憶體非常有限,並且在有人響應我們的監控警報之前它就耗盡了記憶體。
顯然,如果可能,最好避免使用交換,但如果我啟用了交換,我的實例可能會保持線上,儘管性能下降。
鑑於硬碟空間通常很充足,即使只在特殊情況下才需要,啟用交換似乎也是一個好主意。
預設情況下,OpsWorks 僅啟用微實例的交換,而不是小型實例。為什麼他們在啟用交換方面如此保守,如果我不需要它進行正常操作,是否有理由不想啟用交換?
我認為關鍵是你需要知道你的程序需要什麼記憶體。如果您使用的是 EC2,這意味著您選擇的實例大小可以覆蓋一些工作負載;我經常看到工作負載只是一個程序/服務。添加一堆交換很便宜,但您需要知道它何時/為什麼使用該交換。我經常在這裡看到答案說;“添加交換以防某些非活動程序佔用了一些 RAM”,這對桌面來說是有意義的,但在您的 EC2 實例上,您應該知道程序的執行特徵——尤其是當您重新開發一個應用程序——通過在開發過程中禁用交換來了解它通常如何執行,然後在生產中添加交換並將交換性提高到一個高值(90+)。
另一種看待它的方式是,在伺服器環境中,尤其是在雲中,您可以根據工作負載定制實例,您真的希望程序交換嗎?這對性能好嗎?當你得到一台體積很小的 2GB RAM 機器時,你不會成為一個快樂的露營者,它執行一個需要 3GB 才能舒適地連續將頁面交換到磁碟上的程序。