gpt4 book ai didi

go - 用户空间程序(runc)是否调节 docker 容器进程的物理地址空间的大小?

转载 作者:行者123 更新时间:2023-12-01 22:16:57 25 4
gpt4 key购买 nike

下面是在 AWS EC2 实例(Linux)上配置 ECS 任务容器的 CloudFormation 模板:

  TodobackendTaskDefinition:
Type: "AWS::ECS::TaskDefinition"
Properties:
ContainerDefinitions:

- Name: todobackend
Image: someacct/todobackend
Memory: 450
MountPoints:
- ContainerPath: /var/www/todobackend
SourceVolume: webroot


- Name: nginx
Image: someacct/todobackend-nginx
Memory: 300
PortMappings:
- ContainerPort: "8000"
HostPort: "8000"
MountPoints:
- ContainerPath: /var/www/todobackend
SourceVolume: webroot

Volumes:
- Name: webroot
Host:
SourcePath: /ecs/webroot


TodobackendAdhocTaskDefinition:
Type: "AWS::ECS::TaskDefinition"
Properties:
ContainerDefinitions:
- Name: todobackend
Image: someacct/todobackend
Memory: 245
MountPoints:
- ContainerPath: /var/www/todobackend
SourcePath: webroot

Volumes:
- Name: webroot
Host:
SourcePath: /ecs/webroot

其中三个容器的内存属性被平均分配(450+300+250 MB),假设这 3 个容器在 t2.micro 上运行已分配 1 GB RAM 的 EC2 实例类型(物理)

随机更改这些值( "Memory" )使容器 运行或失败不知道失败的正当理由。

失败时,我们会在 AWS 云中调试时收到此类错误:

enter image description here

容器不在 docker 上运行。容器是进程——它们在 linux 内核上运行。容器是 Linux 进程(或 Windows)

Docker 容器命名空间是使用 runtime·clone() 在内部创建的系统调用。

enter image description here

内存管理将每个进程的虚拟地址空间映射到物理地址空间。进程管理是指虚拟地址,而不是物理地址。

对于 Memory: 300上述代码中的 MB 语法,AWS documentation说:“要呈现给容器的内存量(以 MiB 为单位)。”



在 docker 世界中, containerd为每个新容器创建 shim 进程。 runc实际上创建了一个容器进程。

1)
RAM Memory: 300 的分配是什么?容器进程的MB大小,意思是?在上面的代码中......它是进程的物理地址空间(或进程的虚拟地址空间)的大小吗?

2)
是否 runc用户空间程序使用 runtime·clone()为每个容器进程设置物理内存空间( Memory: 300 MB)的系统调用?

https://github.com/golang/go/blob/1650f1ba0b964a06a242c3318e85b3b46f010614/src/runtime/sys_linux_amd64.s#L540

最佳答案

你不应该使用 memory在如此小的实例中使用如此小的内存的参数,请记住这两者之间有一个很大的区别,通过达到内存限制,您的容器将是 被杀 .

使用 memoryReservation,您的容器可以消耗更多内存,如果一个容器处于负载状态,那么它消耗的内存将超过所需的限制。

内存预订

The soft limit (in MiB) of memory to reserve for the container. When system memory is under contention, Docker attempts to keep the container memory to this soft limit; however, your container can consume more memory when needed.



内存

The amount (in MiB) of memory to present to the container. If your container attempts to exceed the memory specified here, the container is killed.



container_definition_memory

其中此内存参数不受容器本身控制,而是由 ECS 代理控制。

ECS_agent

How to calculate memory size needed for each docker container?



如果您担心这个问题,这完全取决于您将在容器中运行的底层应用程序。我看到你正在使用 nginx,你可以在这里阅读 nginx-plus-sizing-guide

关于go - 用户空间程序(runc)是否调节 docker 容器进程的物理地址空间的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59222213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com