防止Linux系統進程被殺的方法

來源:互聯網
上載者:User

Linux的記憶體管理有一套機制:當系統記憶體溢出的時候,它會選擇一個/幾個適當的進程殺掉以維持系統的穩定運行。不過機器畢竟是機器,雖然它竭盡全力去選擇那些真正是罪魁禍首的進程,但是難免會出錯,或者是不公平,到頭來系統還是因為誤殺而變得殘缺不全,甚至不能這場運行。這個時候可能就需要:人為地幹預、引導系統做出正確的選擇。

這種行為的控制是通過調整進程相應目錄下的/proc/[PID]/oom_adj來實現的,其中oom_adj的取值返回是-17~15,當進程的oom_adj是-17時,系統將不會殺死它,-16到15使得進程的/proc/[PID]/oom_score值呈指數(K * 2 ^ n)形式遞增,也就是說他們被殺的可能性呈指數形式遞增。另外,開天闢地的第一個進程(進程號為1)init也不在被殺之列,無論它的oom_adj值為多少。原來只有系統資源系統管理權限(CAP_SYS_RESOURCE)的進程才能做oom_adj值的調整,現在如果是把進程的被殺可能性提高則不需要什麼特殊許可權,我們也確實不應剝奪它自殺或者是它的擁有者有意把它推上懸崖的權利。

禁止進程被殺的具體操作為:

root@gentux xiaosuo # pgrep dbus-daemon
4595
6664
root@gentux xiaosuo # cat /proc/4595/oom_score
559
root@gentux xiaosuo # echo -17 > /proc/4595/oom_adj
root@gentux xiaosuo # cat /proc/4595/oom_score
0

注意:這個技巧是比較危險的,除非你能100%肯定你禁止被殺的進程沒有問題,不然不要嘗試做愚蠢的設定,否則後果自負。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.