如何解決對Docker容器內(nèi)存限制警告或未實(shí)際限制的問題
解決對Docker容器內(nèi)存限制警告或未實(shí)際限制的問題
WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.
a229353897850843206a76458307a37eaeb3c8e1adf0e58e458b9ed10790cfa8
當(dāng)試圖在啟動docker容器時使用–memory指令時可能會出現(xiàn)此類警告。
場景
筆者的場景是試圖在一個2G內(nèi)存服務(wù)器上加入RabbitMQ,但是內(nèi)存已所剩無幾。為了防止種種問題,需要進(jìn)行限制。
一個想法是在啟動容器時使用–memory指令限制其內(nèi)存大小。但啟動成功后筆者收到文章上述警告。
含義
這意味著筆者服務(wù)器的Linux 內(nèi)核當(dāng)前沒有啟用對 swap 限制的支持,或者 cgroup 沒有正確掛載。而cgroup(Control Group)是 Linux 內(nèi)核中的一個功能,用于限制、控制和監(jiān)視進(jìn)程組的資源使用,如 CPU、內(nèi)存、磁盤 I/O 等。
cgroup 允許系統(tǒng)管理員將一組進(jìn)程組織在一起,并為它們分配資源。
如果你沒有正確掛載cgorup,在這種情況下,雖然你指定了 --memory
限制,但無法限制容器的 swap 內(nèi)存使用。
解決方案
步驟 1:更新 GRUB 配置
- 編輯 GRUB 配置文件:
sudo nano /etc/default/grub
- 在
GRUB_CMDLINE_LINUX_DEFAULT
行中添加cgroup_enable=memory swapaccount=1
:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash cgroup_enable=memory swapaccount=1"
這行將引導(dǎo)加載程序的默認(rèn)內(nèi)核命令行參數(shù),以下是具體參數(shù)釋義:
quiet
: 啟動時禁用大多數(shù)內(nèi)核啟動信息的顯示,使啟動過程更加簡潔。splash
: 啟用啟動時顯示圖形啟動畫面(Splash Screen),通常用于顯示啟動時的廠商標(biāo)志或進(jìn)度條。cgroup_enable=memory
: 啟用內(nèi)核的 cgroup 內(nèi)存子系統(tǒng),允許使用 cgroup 來管理和限制內(nèi)存資源。swapaccount=1
: 啟用 swap 賬戶統(tǒng)計(jì)。這個參數(shù)使 cgroup 能夠跟蹤和管理交換空間(swap)的使用情況。
- 保存并退出編輯器
步驟 2:更新 GRUB 并重啟
- 更新 GRUB 配置:
sudo update-grub
- 重啟系統(tǒng):
sudo reboot
驗(yàn)證
通過以下命令檢驗(yàn)容器是否真的將memory進(jìn)行了限制。
比如,驗(yàn)證RabbitMQ的內(nèi)存是否被限制在350mb以內(nèi):
sudo docker stats rabbitmq
得到如下輸出結(jié)果:
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
7e38b33cd7f7 rabbitmq 0.16% 135.3MiB / 350MiB 67.65% 1.2kB / 0B 56.9MB / 598kB 29
可以發(fā)現(xiàn)在limit一列中,的確將RabbitMQ的內(nèi)存限制在350mb以內(nèi)。
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解SpringBoot項(xiàng)目docker環(huán)境運(yùn)行時無限重啟問題
這篇文章主要介紹了詳解SpringBoot項(xiàng)目docker環(huán)境運(yùn)行時無限重啟問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11Docker 容器生命周期 架構(gòu) 以及和VM之間的差異詳解
這篇文章主要介紹了Docker 容器生命周期 架構(gòu) 以及和VM之間的差異詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11Docker 簡單部署 ElasticSearch的實(shí)現(xiàn)方法
這篇文章主要介紹了Docker 簡單部署 ElasticSearch的實(shí)現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09Docker容器中數(shù)據(jù)卷volumes的使用
volume(卷)用來存儲docker持久化的數(shù)據(jù),其實(shí)就是一個主機(jī)上的一個目錄,由docker統(tǒng)一管理,下面這篇文章主要給大家介紹了關(guān)于Docker容器中數(shù)據(jù)卷volumes使用的相關(guān)資料,需要的朋友可以參考下2022-04-04Docker容器網(wǎng)絡(luò)配置全攻略之橋接、Host、container詳解
這篇文章主要介紹了Docker容器網(wǎng)絡(luò)配置全攻略之橋接、Host、container的使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-04-04Docker部署web項(xiàng)目的實(shí)現(xiàn)
這篇文章主要介紹了Docker部署web項(xiàng)目的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10Docker 修改docker存儲位置 修改容器鏡像大小限制操作
這篇文章主要介紹了Docker 修改docker存儲位置 修改容器鏡像大小限制操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11