何時根據免費輸出升級 RAM
我有一個在 Linux 伺服器上執行的 Java 應用程序,物理記憶體 (RAM) 分配為 12GB,我會看到一段時間內的正常使用率,如下所示。
sys> free -h total used free shared buff/cache available Mem: 11G 7.8G 1.6G 9.0M 2.2G 3.5G Swap: 0B 0B 0B
最近在增加應用程序的負載時,我可以看到 RAM 使用率幾乎已滿,可用空間非常少,我可能會遇到一些緩慢但應用程序仍然可以正常工作。
sys> free -h total used free shared buff/cache available Mem: 11G 11G 134M 17M 411M 240M Swap: 0B 0B 0B sys> free -h total used free shared buff/cache available Mem: 11G 11G 145M 25M 373M 204M Swap: 0B 0B 0B
我提到了https://www.linuxatemyram.com/它建議了以下幾點。
您可能需要調查的真正低記憶體情況的警告信號:
- 可用記憶體(或“空閒 + 緩衝區/記憶體”)接近於零
- 使用的掉期增加或波動。
- dmesg | grep oom-killer 顯示 OutOfMemory-killer 在工作
從以上幾點來看,我在應用程序級別沒有看到任何 OOM 問題,並且交換也被禁用。所以忽略了這兩點。困擾我的一點是可用記憶體小於零,我需要澄清一下
問題:
如果available接近0,它會導致系統崩潰嗎?
這是否意味著當可用記憶體減少時我需要升級 RAM?
應該在什麼基礎上分配/增加 RAM 記憶體?
對於 RAM 記憶體分配,我們是否有任何需要遵循的官方建議/指南?
如果available接近0,它會導致系統崩潰嗎?
在我的一台伺服器上進行測試時,我載入了幾乎滿的記憶體,如下所示
sys> free -h total used free shared buff/cache available Mem: 11G 11G 135M 25M 187M 45M Swap: 0B 0B 0B
能夠單獨看到我的應用程序(消耗更多記憶體)被記憶體不足殺手殺死,可以在核心日誌中引用
dmesg -e
[355623.918401] [21805] 553000 21805 69 21 2 0 0 rm [355623.921381] Out of memory: Kill process 11465 (java) score 205 or sacrifice child [355623.925379] Killed process 11465 (java), UID 553000, total-vm:6372028kB, anon-rss:2485580kB, file-rss:0kB, shmem-rss:0kB
https://www.kernel.org/doc/gorman/html/understand/understand016.html
Out Of Memory Killer 或 OOM Killer 是 linux 核心在系統記憶體嚴重不足時使用的程序。出現這種情況是因為 linux 核心為其程序分配了過多的記憶體。…這意味著正在執行的程序需要比物理可用更多的記憶體。
如果available接近0,它會導致系統崩潰嗎?
現代廣泛使用的作業系統可以處理這種情況,所以,不,系統不會正常崩潰,儘管它可能變得很慢,你將無法實際使用它。
這是否意味著當可用記憶體減少時我需要升級 RAM?
您的可用 RAM 確實太低,它可能會導致程序被從 RAM 中逐出。您可能應該添加更多 RAM。
應該在什麼基礎上分配/增加 RAM 記憶體?
如果您的性能受到影響(例如,由於過多的 SWAP 使用而導致磁碟抖動),或者您因為沒有足夠的 RAM 來完成任務而無法完成工作。
對於 RAM 記憶體分配,我們是否有任何需要遵循的官方建議/指南?
沒有,我知道。每個人的 RAM 要求都不同。如果我們談論 2021 年,現代作業系統、桌面環境和 Web 瀏覽器,4GB 的 RAM 是絕對最低的,但我不建議少於 8GB。最後,這取決於您的工作流程,沒人知道。在某些領域,人們已經擁有配備 128GB RAM 的工作站(影片和圖像編輯、3D 渲染、數學/化學/物理/工程計算和 AI)。