Linux

Cent OS:如何關閉或減少記憶體過度使用,這樣做是否安全?

  • January 2, 2019

有時,“我的”伺服器會因為記憶體和交換空間不足而停止。(它一直響應 ping 但僅此而已,甚至沒有 ssh)。

我被告知 linux 會進行記憶體過度使用,據我所知,這與銀行對金錢的處理方式相同:它授予程序比實際可用的記憶體更多的記憶體,假設大多數程序實際上不會使用他們要求的所有記憶體,在至少不是同時。

請假設這實際上是我的系統偶爾掛起的原因,我們不在這裡討論是否是這種情況(請參閱什麼可能導致伺服器上的所有服務關閉,但仍然響應 ping?以及如何弄清楚) .

所以,

  1. 如何在 CentOS 中禁用或大幅減少記憶體過度使用?我讀過有兩個設置稱為 vm.overcommit_memory (值 0、1 或 2)和 vm.overcommit_ratiom 但我不知道我必須在哪裡找到並更改它們(希望是一些配置文件),我應該嘗試什麼值,以及是否需要重新啟動伺服器才能使更改生效。
  2. 它安全嗎?我可以期待什麼副作用?當Google搜尋 overcommit_memory 時,我發現一些可怕的事情,比如人們說他們的伺服器無法再啟動……

由於導致記憶體使用量突然增加的原因是 mysql,因為 php 進行了查詢,而這些查詢又在服務 http 請求時被呼叫,所以我希望只有一些 php 腳本無法完成,因此有時會出現大約 500 個響應伺服器太忙了,這是我可以承擔的風險(當然最好讓整個伺服器無法訪問並且必須硬重啟它)。

或者如果我選擇了錯誤的設置,它真的會導致我的伺服器無法重新啟動嗎?

可以通過以下方式禁用記憶體過量使用vm.overcommit_memory=2

0 是預設模式,其中核心通過計算與正在發出的分配請求相比的空閒記憶體來啟發式地確定分配。並將其設置為 1 會啟用魔法模式,在這種模式下,核心總是會宣傳它有足夠的空閒記憶體來進行任何分配。設置為 2,意味著程序只能分配最多可配置數量 ( overcommit_ratio) 的 RAM,並且當超過該數量時將開始收到分配失敗或 OOM 消息。

這樣做安全嗎,不。除非您 100% 確定工作負載和硬體容量,否則我還沒有看到禁用記憶體過量使用確實有幫助的任何適當案例。如果您有興趣,請安裝kernel-docs包並轉到/Documentation/sysctl/vm.txt閱讀更多內容,或線上閱讀。

如果您設置vm.overcommit_memory=2,那麼它將過度使用配置的物理 RAM 的百分比vm.overcommit_ratio(預設為 50%)。

echo 0/1/2 > /proc/sys/vm/overcommit_memory 

這將無法在重新啟動後繼續存在。對於持久性,將其放入/etc/sysctl.conf文件中:

vm.overcommit_memory=X

並執行sysctl -p。無需重新啟動。

引用自:https://serverfault.com/questions/485798