免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

還在擔心服務器進程被OOM?只需一招,即可避免

2021-01-30    分類: 網站建設

問題描述

Linux 內核有個機制叫 OOM killer(Out-Of-Memory killer),該機制會監控那些占用內存過大,尤其是瞬間很快消耗大量內存的進程,為了防止內存耗盡而內核會把該進程殺掉。

典型的情況是:某天一臺機器突然 ssh 遠程登錄不了,但能 ping 通,說明不是網絡的故障,原因是 sshd 進程被 OOM killer 殺掉了(多次遇到這樣的假死狀況)。重啟機器后查看系統日志「/var/log/messages」會發現「Out of Memory: Kill process 1865(sshd)」類似的錯誤信息。

還在擔心服務器進程被OOM?只需一招,即可避免

如何防止重要的系統進程觸發(OOM)機制而被殺死呢?只需要一招,就可以輕松避免。

還在擔心服務器進程被OOM?只需一招,即可避免

設置參數「/proc/PID/oom_adj為-17」,可臨時關閉 Linux 內核的 OOM 機制。內核會通過特定的算法給每個進程計算一個分數來決定殺哪個進程,每個進程的 OOM 分數可以在「/proc/PID/oom_score」中找到。

處理辦法

1. 方法一:設置參數/proc/PID/oom_adj為-17

如何防止mongod被殺,可以這樣操作:

(1) 編寫腳本文件oomadj.sh,內容如下:

  1. #!/bin/bash?
  2. netstat?-ntlup?|grep?mongod?|awk?'{print$NF}'?|awk?-F?'/'?'{print$(NF-1)}'?|while?read?PID;?
  3. do?
  4. echo?-17?>/proc/$PID/oom_adj;?
  5. done?

(2) 設置定時計劃

  1. [root@mnkj-mongodb-01?~]crontab?-e?
  2. */1?*?*?*?*?/root/oomadj.sh?

還在擔心服務器進程被OOM?只需一招,即可避免

至于為什么用-17而不用其他數值(默認值為0),這個是由linux內核定義的,查看內核源碼可知:

以 linux-3.3.6 版本的 kernel 源碼為例,路徑為「linux-3.6.6/include/linux/oom.h」,閱讀內核源碼可「oom_adj」的可調值為 15 到 -16,其中 15 大-16 最小,-17 為禁止使用OOM。「oom_score」為 2 的 N 次方計算出來的,其中 N 就是進程的「oom_adj」值,所以「oom_score」的分數越高就越會被內核優先殺掉。

2. 方法二:修改內核參數禁止OOM機制

  1. #?sysctl?-w?vm.panic_on_oom=1?
  2. vm.panic_on_oom?=?1?//1表示關閉,默認為0表示開啟OOM?
  3. #?sysctl?-p?

注意事項

注意:

  • Kernel-2.6.26之前版本的 oomkiller 算法不夠精確,RHEL 6.x 版本的 2.6.32 可以解決這個問題。
  • 子進程會繼承父進程的 oom_adj。
  • OOM 不適合于解決內存泄漏(Memory leak)的問題。
  • 有時 free 查看還有充足的內存,但還是會觸發 OOM,是因為該進程可能占用了特殊的內存地址空間

OOM killer 是保證系統內存不被個別進程消耗殆盡非常實用的機制,但是在實際工作除了進程運行過多會造成內存占用過高,還有很多其他的因素比如:訪問增多、遭受攻擊等...

這時我們不僅要使用好 OOM killer,更需要關注服務器的資源使用情況,需要完善的實時監控體系,能夠對于系統存在問題能夠及時的發現并處理,保證業務穩定運行。

網頁標題:還在擔心服務器進程被OOM?只需一招,即可避免
URL標題:http://m.newbst.com/news36/98136.html

成都網站建設公司_創新互聯,為您提供網站內鏈App設計網站策劃搜索引擎優化做網站面包屑導航

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

外貿網站建設