當前位置:首頁 » 操作系統 » linuxoom

linuxoom

發布時間: 2022-10-03 19:30:15

linux oom 內存超過多少會被kill

OOM_killer是Linux自我保護的方式,當內存不足時不至於出現太嚴重問題,有點壯士斷腕的意味
在kernel 2.6,內存不足將喚醒oom_killer,挑出/proc/<pid>/oom_score最大者並將之kill掉

為了保護重要進程不被oom-killer掉,我們可以:echo -17 > /proc/<pid>/oom_adj,-17表示禁用OOM
我們也可以對把整個系統的OOM給禁用掉:
sysctl -w vm.panic_on_oom=1 (默認為0,表示開啟)
sysctl -p

值得注意的是,有些時候 free -m 時還有剩餘內存,但還是會觸發OOM-killer,可能是因為進程佔用了特殊內存地址

平時我們應該留意下新進來的進程內存使用量,免得系統重要的業務進程被無辜牽連
可用 top M 查看最消耗內存的進程,但也不是進程一超過就會觸發oom_killer
參數/proc/sys/vm/overcommit_memory可以控制進程對內存過量使用的應對策略
當overcommit_memory=0 允許進程輕微過量使用內存,但對於大量過載請求則不允許(默認)
當overcommit_memory=1 永遠允許進程overcommit
當overcommit_memory=2 永遠禁止overcommit
ref:http://www.2cto.com/os/201309/247081.html

㈡ 如何理解Linux中的OOM機制

首先解釋兩個概念:
swap:在linux裡面,當物理內存不夠用了,而又有新的程序請求分配內存,那麼linux就會選擇將其他程序暫時不用的數據交換到物理磁碟上(swap out),等程序要用的時候再讀進來(swap in)。這樣做的壞處顯而易見,swap in/swap out這里的代價比較大,相比數據一直放在內存裡面,多了讀磁碟的操作,而磁碟IO代價。。大家都懂的。
OOM:out of memory,指在linux裡面,由於系統內存壓力,系統會選擇保護一些系統進程,而將一些其他的進程kill掉,釋放內存。

㈢ 如何優雅地使用Linux系統OOM ( Out Of Memory Killer)

Linux內核根據伺服器上當前運行應用的需要來分配內存。因為這通常是預先發生的,所以應用並不會使用所有分配的內存。這將會導致資源浪費,Linux內核允許超分內存以提高內存使用效率。Linux內核允許超分內存,比如總共8G內存,可以分給10個進程各1G,這通常沒問題。但問題發生在太多應用一起佔用內存,有8個進程各佔了1G,剩下兩個進程要喝西北風了。

由於內存不足,伺服器有崩潰的風險。The  server runs the risk of crashing because it  ran out of memory。為了防止伺服器到達這個臨近狀態,內核中有一個OOM Killer殺手進程。To prevent the server from reaching  that critical state, the kernel also contains a process known as the OOM Killer。內核利用這個殺手進程開始屠殺那些非必要進程,以便伺服器正常運行。The kernel uses this  process to start killing non-essential  processes so the server can remain  operational.

當你認為這一切都不是問題時,因為OOM Killer只殺掉那些非必要的,不是用戶需要的進程。舉例,兩個應用(Apache和MySQL)通常先被殺掉,因為佔用大量的內存。但這將導致一個web網站立馬癱瘓了。

當嘗試找到為什麼一個應用程序或進程被OOM killer殺掉時,有很多地方可以找到一個進程如何被殺掉以及被殺掉的原因。

$ grep -i kill /var/log/messages*

host kernel: Out of Memory: Killed process 5123 (exampleprocess)

The capital K in Killed tells you that the process was killed with a -9 signal, and this typically is a good indicator that the OOM Killer is to blame.

$ free -lh

The -l switch shows high and low memory  statistics, and the -h switch puts the output  into gigabytes for easier human readability. You can change this to the -m switch if you  prefer the output in megabytes.

同時該命令會給出Swap內存使用信息。注意:free命令給出某個時刻得數據,需要多執行幾次才能知道內存動態的佔用情況。

$ vmstat -SM 10 20

20次,每次間隔10秒給出內存使用情況。

top 默認輸出CPU的使用情況,不過你可以在top後再按下shift + M,你將得到內存的使用情況。

配置文件/etc/sysctl.conf:

sysctl vm.panic_on_oom=1

sysctl kernel.panic=X

echo 「vm.panic_on_oom=1」 >> /etc/sysctl.conf

echo 「kernel.panic=X」 >> /etc/sysctl.conf

大多數情況下,內存不足時每次都重啟是不合適的。

既可以保護一些重要進程不被OMM killer殺掉,又可以讓不重要的進程更容易殺掉:

echo -15 > /proc/(PID)/oom_adj (不被殺)

echo 10 > /proc/(PID)/oom_adj (更易殺)

pstree -p | grep "process" | head -1

在某些情況下,豁免進程可能導致意外的行為變化,取決於系統和資源配置。假如內核無法殺死一個佔用大量內存的進程,將殺死其他進程,包括那些重要的操作系統進程。

由於OOM killer可調節的有效范圍在-16到+15之間,設置為-17將豁免一個進程,因為在OOM killer調節范圍之外。通常的規則是這個參數越大越容易被殺死豁免一個進程的命令是

echo -17 > /proc/(PID)/oom_adj

警告:不建議用於生產環境。

假如重啟,修改進程優先順序,豁免一個進程不足夠好,有個風險的選項:將oom killer 功能關閉。

這一選項參數將有如下影響:

4.1) 嚴重的內核恐慌kernel panic

4.2) 系統掛住system hang-up

4.3) 一個完整的系統崩潰system crash

為什麼關閉有風險呢呢?該功能避免自己因資源而跑飛了。如果你關閉此功能,將不能避免內存耗盡。考慮此項時請極度慎重。

sysctl vm.overcommit_memory=2

echo 「vm.overcommit_memory=2」 >> /etc/sysctl.conf

熱點內容
超級訪問陳小春應采兒 發布:2025-05-16 09:43:29 瀏覽:478
緩存視頻合並工具最新版 發布:2025-05-16 09:35:03 瀏覽:194
花雨庭伺服器ip地址和埠 發布:2025-05-16 09:34:58 瀏覽:239
同時修改多台伺服器管理地址工具 發布:2025-05-16 09:20:36 瀏覽:421
什麼配置就能玩地平線 發布:2025-05-16 09:13:46 瀏覽:82
python旋轉圖片 發布:2025-05-16 09:13:40 瀏覽:638
少女前線防檢測腳本 發布:2025-05-16 08:59:07 瀏覽:728
編譯器對系統的依賴 發布:2025-05-16 08:37:29 瀏覽:711
javamap數組 發布:2025-05-16 08:37:28 瀏覽:451
移動光貓如何自行修改密碼 發布:2025-05-16 08:20:15 瀏覽:125