kaiyuanshe / kaiyuanshe.github.io

The Official Web site of KaiYuanShe
https://kaiyuanshe.cn/
25 stars 14 forks source link

feat: limit container use mem #287

Closed luojiyin1987 closed 10 months ago

luojiyin1987 commented 10 months ago

Checklist(清单):

Closes #286

TechQuery commented 10 months ago

启动命令要加参数:https://docs.docker.com/compose/compose-file/compose-versioning/#compatibility-mode

luojiyin1987 commented 10 months ago

启动命令要加参数:https://docs.docker.com/compose/compose-file/compose-versioning/#compatibility-mode


Do not use this in production

We recommend against using --compatibility mode in production. The resulting configuration is only an approximate using non-Swarm mode properties, it may produce unexpected results.


它自己都不建议使用 compatibility-mode  
TechQuery commented 10 months ago
Do not use this in production

We recommend against using --compatibility mode in production. The resulting configuration is only an approximate using non-Swarm mode properties, it may produce unexpected results.

它自己都不建议使用 compatibility-mode

你看我上面的博文,如果不加这个就必须用 docker stack deploy 来基于 Swarm 运行,否则就不生效。

luojiyin1987 commented 10 months ago
Do not use this in production

We recommend against using --compatibility mode in production. The resulting configuration is only an approximate using non-Swarm mode properties, it may produce unexpected results.

它自己都不建议使用 compatibility-mode

你看我上面的博文,如果不加这个就必须用 docker stack deploy 来基于 Swarm 运行,否则就不生效。

那里不生效 ? 通过 docker stats image 别的 docker 容器最大的使用内存是主机内存, kys-ows_kys-ows_1 是 3.9G 多,接近 4000M。

资料 image 在docker compose v3 版本中添加 对 deploy 的支持, 在deploy 没看到对运行模式的要求,是否是 swarm。

swarm 已经几年不维护了, 业界对 swarm 的评价也不好。

你引用的中文资料已经是几年前了。

在 Linux 中, 很容易通过 cgroups 和 namespaces, 限制资源分配。

luojiyin1987 commented 10 months ago

现在通过

sudo dmesg -T -l err

image anon-rss:4004128kB 说明内存被限制到 4000M 左右, 容器内存使用到3544M 触发 cgroup 的 OOM , 重启容器,释放内存。

luojiyin1987 commented 10 months ago
docker  info 

中 是

 Swarm: inactive
docker node ls
Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.

docker service ls 
Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.

可以看出这东西跟 Swarm 没强相关。

TechQuery commented 10 months ago

那里不生效 ? 通过 docker stats image 别的 docker 容器最大的使用内存是主机内存, kys-ows_kys-ows_1 是 3.9G 多,接近 4000M。

资料 image 在docker compose v3 版本中添加 对 deploy 的支持, 在deploy 没看到对运行模式的要求,是否是 swarm。

swarm 已经几年不维护了, 业界对 swarm 的评价也不好。

你引用的中文资料已经是几年前了。

在 Linux 中, 很容易通过 cgroups 和 namespaces, 限制资源分配。

终于找到确切的官方说法了,只有 deploy.resources 被 Docker compose 支持,所以不需要加启动命令参数,而其它属性就必须要加参数:

The following sub-options only takes effect when deploying to a swarm with docker stack deploy, and is ignored by docker-compose up and docker-compose run, except for resources.

https://docs.docker.com/compose/compose-file/compose-file-v3/#deploy