Docker怎么限制容器可用的內存
站群高防大帶寬,容器進程
海外主機將與你分享Docker如何限制容器的可用內存。希望你看完這篇文章有所收獲。大家一起討論一下。
為什么要限制容器對內存的使用?
限制容器過多使用主機內存非常重要。對于linux主機,一旦內核檢測到沒有足夠的內存來分配,它就會拋出oome,并開始殺死一些進程來釋放內存空間。不幸的是,任何進程都可能成為內核的目標,包括docker守護程序和其他重要程序。更危險的是,如果一個支撐系統(tǒng)運行的重要進程被扼殺了,整個系統(tǒng)就完蛋了!這里我們考慮一個常見的場景,大量的容器消耗了主機的內存,oome觸發(fā)后系統(tǒng)內核立即開始殺死進程釋放內存。如果內核殺死的第一個進程是docker守護進程呢?結果是所有容器都不工作,這是不能接受的!
為了解決這個問題,docker試圖通過調整docker守護進程的oom優(yōu)先級來緩解這個問題。在選擇要殺死的進程時,內核會給所有進程打分,直接殺死得分最高的進程,然后是下一個。當docker守護進程的oom優(yōu)先級降低時,docker守護進程的評分不僅會低于容器進程,還會低于其他進程。這樣,docker守護進程就安全多了。
我們可以通過以下腳本直觀地查看當前系統(tǒng)中所有進程的分數(shù):
?
一個
2美元docker run-it-RM-m 300m-memory-swap=300m u-stress/bin/bash # stress-VM 1-VM-bytes 500m
演示中容器的物理內存限制在300m,但流程想申請500m的物理內存。由于沒有可用的交換,該進程被oom kill直接終止。如果有足夠的交換,程序至少可以正常運行。
我們可以使用-oom - oom-kill-disable選項強行阻止oom kill的發(fā)生,但我認為oom kill是一種健康的行為,為什么要阻止呢?
除了限制可用交換的大小,您還可以按容器設置使用交換的緊急程度,這與主機的交換程度相同。默認情況下,容器繼承主機的交換性。如果要顯式設置容器的交換值,可以使用- memory-swappiness選項。
看了這篇文章,相信你對“Docker如何限制容器的可用內存”有一定的了解。如果你想了解更多,請關注海外主機。謝謝你的閱讀!
Tags:站群高防大帶寬,容器進程,Docker怎么限制容器可用的內存
版權聲明:本站文章來源標注為YINGSOO的內容版權均為本站所有,歡迎引用、轉載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網站,禁止在非maisonbaluchon.cn所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內容來源于網友推薦、互聯(lián)網收集整理而來,僅供學習參考,不代表本站立場,如有內容涉嫌侵權,請聯(lián)系alex-e#qq.com處理。
關注官方微信