Docker实用贴士—容器内存识别问题

2022-02-17 13:13:30 9点赞 47收藏 3评论

情形再现

大家使用docker下容器时,是否遇到过下面几种情况:

  • 创建的容器运行一段时间后重启,查看日志发现被kill后由于自动启动而重启(如甜糖)

  • 创建的容器明明显示内存充足,可是却因为内存不足而运行错误(如基于selenium的项目)

  • 容器将内存作为缓存交换区,本应该分配多少占用多少,但是分配了2G却跑满了16G

原因分析

这些情况背后的原因是大家弄错了创建容器时设置的内存的概念。我们一般在创建时使用-m命令来设置内存,但我们看一下官方doc对于-m的说明:

Limit a container’s access to memory
Docker can enforce hard memory limits, which allow the container to use no more than a given amount of user or system memory, or soft limits, which allow the container to use as much memory as it needs unless certain conditions are met, such as when the kernel detects low memory or contention on the host machine. Some of these options have different effects when used alone or when more than one option is set.

-m or --memory=The maximum amount of memory the container can use. If you set this option, the minimum allowed value is 6m (6 megabytes). That is, you must set the value to at least 6 megabytes.

翻译一下就是,我们所设置的是限制内存,用来防止容器占用过多内存。就像是你给小狗栓了一根绳子,你只能限制他不跑远,但方式是一跑远就被勒脖子。而真正的方式应该是让容器看到限制的内存,从而自行调节。

解决方法

说了那么多,我们该如何解决呢?用lxcfs把docker设定的限制内存映射给容器。我们以ubuntu举例说明

第一步:安装lxcfs

运行如下命令

apt install lxcfs -y

成功后会显示successfully,由于我已经安装了,显示的是已存在

安装lxcfs安装lxcfs

安装lxcfs

第二步:重新安装原先容器

这里顺便说一下如何升级容器。docker与容器是一种映射关系,容器所使用的配置文件、存放的数据文件等通过映射的位置放到宿主机上。所以升级容器也好、删除容器也好,只要你映射的文件夹没有删除,并且重装时映射位置没有变化,那么所有的数据理论上是不变的。所以升级容器就是简单地删除重装。不过如果你使用portainer,可以在如图的位置选择一键重建。

点击重建点击重建

点击重建

选择拉取最新选择拉取最新

选择拉取最新

回归正题,明白了前面说的,就可以放心大胆的删除容器重装了。注意,删除后重新安装时,要添加如下的映射关系:

-v /var/lib/lxcfs/proc/meminfo:/proc/meminfo:rw

例如,你要拉取安装甜糖镜像,官方给的命令如下:(表示换行符,原本应该一行打出来的命令,通过来换行变的美观,同时保证一次运行)

sudo docker run -d
-v /mnt/host/dir:/mnt/data/ttnode
-v /var/run/docker.sock:/var/run/docker.sock
--name ttnode
--hostname ttnode
--net=host
--restart=always
--memory=2g
--cpus=1.5
tiptime/ttnode:latest

现在你重建的命令如下

sudo docker run -d
-v /mnt/host/dir:/mnt/data/ttnode
-v /var/lib/lxcfs/proc/meminfo:/proc/meminfo:rw
-v /var/run/docker.sock:/var/run/docker.sock
--name ttnode
--hostname ttnode
--net=host
--restart=always
--memory=2g
--cpus=1.5
tiptime/ttnode:latest

加粗的部分就是添加的新的映射关系。无论哪个镜像,都是如此添加一句。

最后:检查效果

输入如下命令查看一下各个容器情况

docker stats -a

查看状态查看状态

查看状态

可以看到,我设定的limit为2.8g,而甜糖设定是占用识别到的内存的80%,因此设定内存已经成功映射给容器了。

总结

至此,我们已经完成了内存设定。如果想看更多docker相关内容,欢迎大家留言。
本人学疏才浅,文章如有错误还请大家多多指正。

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起

UGREEN 绿联 DX4600 Pro 4盘位NAS(奔腾N6005、8GB)

UGREEN 绿联 DX4600 Pro 4盘位NAS(奔腾N6005、8GB)

1799元起

ZSpace 极空间 私有云 Z4Pro 8G版 4盘位NAS存储(N97、8GB)

ZSpace 极空间 私有云 Z4Pro 8G版 4盘位NAS存储(N97、8GB)

2499元起

QNAP 威联通 TS-464C2 四盘位 NAS网络存储(赛扬N5095、8GB)黑色

QNAP 威联通 TS-464C2 四盘位 NAS网络存储(赛扬N5095、8GB)黑色

2499元起

ZSpace 极空间 私有云 Z4Pro 性能版 NAS存储(N305、16GB)

ZSpace 极空间 私有云 Z4Pro 性能版 NAS存储(N305、16GB)

3299元起

UGREEN 绿联 DX4600 四盘位NAS存储 (赛扬N5105、8GB)

UGREEN 绿联 DX4600 四盘位NAS存储 (赛扬N5105、8GB)

1689.01元起

Synology 群晖 DS224+ 双盘位NAS(赛扬J4125、2GB)

Synology 群晖 DS224+ 双盘位NAS(赛扬J4125、2GB)

2289.89元起

ZSpace 极空间 私有云 Z4Pro 16G版 4盘位NAS存储(N97、16GB)

ZSpace 极空间 私有云 Z4Pro 16G版 4盘位NAS存储(N97、16GB)

2799元起

ZSpace 极空间 私有云 Z423 旗舰版 8盘位NAS存储(锐龙R7-5825U、64GB)

ZSpace 极空间 私有云 Z423 旗舰版 8盘位NAS存储(锐龙R7-5825U、64GB)

5899元起

ASUS 华硕 AS6702T 4盘位NAS存储 黑色(Core2 Quad Q8300、4GB)

ASUS 华硕 AS6702T 4盘位NAS存储 黑色(Core2 Quad Q8300、4GB)

3999元起

QNAP 威联通 TS-466C 四盘位NAS(奔腾N6005、8GB)

QNAP 威联通 TS-466C 四盘位NAS(奔腾N6005、8GB)

3079.01元起

TERRAMASTER 铁威马 F4-424 Pro 四盘位NAS(Intel Core i3、32GB)黑色

TERRAMASTER 铁威马 F4-424 Pro 四盘位NAS(Intel Core i3、32GB)黑色

2499元起

UGREEN 绿联 DX4600+ 4盘位NAS(赛扬N5105、8GB)

UGREEN 绿联 DX4600+ 4盘位NAS(赛扬N5105、8GB)

1899元起

Synology 群晖 DS920+ 4盘位 NAS存储(J4125、4GB)

Synology 群晖 DS920+ 4盘位 NAS存储(J4125、4GB)

2190.84元起

Synology 群晖 DS220+ 2盘位NAS (赛扬J4025、2GB)

Synology 群晖 DS220+ 2盘位NAS (赛扬J4025、2GB)

2179元起

UGREEN 绿联 DH2600 双盘位NAS (N5105、4GB)

UGREEN 绿联 DH2600 双盘位NAS (N5105、4GB)

1349元起

ZSpace 极空间 私有云 Z2Pro 2盘位NAS存储(RK3568、4GB)

ZSpace 极空间 私有云 Z2Pro 2盘位NAS存储(RK3568、4GB)

1099元起
3评论

  • 精彩
  • 最新
  • 置顶 文章中“\”被作为换行符吞掉了 [喜极而泣] 大家看到有空缺的地方就是这个符号。另外大家要记得成段的命令后面要加“\”

    校验提示文案

    提交
  • 好麻烦。。

    校验提示文案

    提交
  • 硬核,干货

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
天猫超级红包
距结束::
每天领现金,最高24888元
红包按钮
最新文章 热门文章
47
扫一下,分享更方便,购买更轻松