为什么 docker 没有限制住 rabbitmq server 的内存?

我的主机是 ubuntu20.04、 32GB RAM、 16Core CPU

我在做 rabbitmq server 的测试,使用 docker。

我希望给 rabbitmq sever 的资源是 1 core cpu、2GB RAM

所以,我写了下面的 docker-compose.yaml 文件

version: "3.7"
services:
  rabbitmq3-management:
    restart: always
    container_name: rabbitmq3-management
    image: rabbitmq:3-management
    hostname: rabbitmq3-management-standalone
    logging:
      driver: json-file
      options:
        max-size: "100m"
        max-file: "1"
    environment:
      - RABBITMQ_DEFAULT_USER=pon
      - RABBITMQ_DEFAULT_PASS=pon
    volumes:
      # - "./volumes:/var/lib/rabbitmq"
      - "./rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf"
    ports:
      - "5672:5672"
      - "15672:15672"
      - "15692:15692"
    deploy:
      resources:
        limits:
          cpus: '1'
          memory: 2048M

rabbitmq.conf 内容如下:

vm_memory_high_watermark.relative = 0.8

然后我 docker-compose up -d 启动了这个 rabbitmq-sever

但是从浏览器界面上看

图片.png

显示,内存 25GB,而不是 800MB!为什么?为什么?为什么?

输入 docker inspect rabbitmq3-management

[
    {
        "Id": "10eddc6ea83de808f795be14b184d3f7b861474e5292059899cfae3b33d168e2",
        "Created": "2023-01-10T02:57:14.197749709Z",
        "Path": "docker-entrypoint.sh",
        "Args": [
            "rabbitmq-server"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 878201,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2023-01-10T02:58:49.424301236Z",
            "FinishedAt": "2023-01-10T02:58:47.365462259Z"
        },
        "Image": "sha256:7edc94eb6c4a7451ee5b2660767a6b478e55dc6a5dd21bfaedeb9ac1cbdd9d34",
        "ResolvConfPath": "/var/lib/docker/containers/10eddc6ea83de808f795be14b184d3f7b861474e5292059899cfae3b33d168e2/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/10eddc6ea83de808f795be14b184d3f7b861474e5292059899cfae3b33d168e2/hostname",
        "HostsPath": "/var/lib/docker/containers/10eddc6ea83de808f795be14b184d3f7b861474e5292059899cfae3b33d168e2/hosts",
        "LogPath": "/var/lib/docker/containers/10eddc6ea83de808f795be14b184d3f7b861474e5292059899cfae3b33d168e2/10eddc6ea83de808f795be14b184d3f7b861474e5292059899cfae3b33d168e2-json.log",
        "Name": "/rabbitmq3-management",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "docker-default",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": [
                "/home/pon/opt/docker-compose-public/rabbit/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf:rw"
            ],
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {
                    "max-file": "1",
                    "max-size": "100m"
                }
            },
            "NetworkMode": "rabbit_default",
            "PortBindings": {
                "15672/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "15672"
                    }
                ],
                "15692/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "15692"
                    }
                ],
                "5672/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "5672"
                    }
                ]
            },
            "RestartPolicy": {
                "Name": "always",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": [],
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "host",
            "Dns": null,
            "DnsOptions": null,
            "DnsSearch": null,
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 2147483648,
            "NanoCpus": 1000000000,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": null,
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": null,
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": -1,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/7b8edcde752c23e298f7829a8a9e55d60a0f20b12584e6e99f693c2be524630e-init/diff:/var/lib/docker/overlay2/a994e23b5968b004e499099f953052cfef51c45866c4d51114a063934814425f/diff:/var/lib/docker/overlay2/fb1c574692a1042fc4585abab2055c455d8c5024a45be3df53d8cb61ec5adf5c/diff:/var/lib/docker/overlay2/f79efd9671d31c9073875708075bb6577923eecfe4c83786bfc67a5a0d57194a/diff:/var/lib/docker/overlay2/d4cd4193177420fe1d50197311eeb742c3fd3042cafd7d4c0d8875c9e1728ca7/diff:/var/lib/docker/overlay2/53bab15c470a056b678837707606020b40257d8a5b648e8488a745c1945fb661/diff:/var/lib/docker/overlay2/92cc1629dcb7e5a89771993ae8a7b181d39357dbeee8dd30a43afcce06bc87e9/diff:/var/lib/docker/overlay2/e3de5d7ac9e68b6a13b2006c4dfb25c1bcaaf9b8792d60ca5a51a8ae67935485/diff:/var/lib/docker/overlay2/c54687bc2cd4fbad20a9b99909880844b665f01018027d40eb7f0936f7d8376d/diff:/var/lib/docker/overlay2/0567d22ca4c1e816d61b4aca2733fc54d5eacd8999735c13c65d8d98a03226af/diff:/var/lib/docker/overlay2/ccb3a9ee8919bc0c2c4275382a88397f12781c872f6f045db641b9daafd7fc78/diff",
                "MergedDir": "/var/lib/docker/overlay2/7b8edcde752c23e298f7829a8a9e55d60a0f20b12584e6e99f693c2be524630e/merged",
                "UpperDir": "/var/lib/docker/overlay2/7b8edcde752c23e298f7829a8a9e55d60a0f20b12584e6e99f693c2be524630e/diff",
                "WorkDir": "/var/lib/docker/overlay2/7b8edcde752c23e298f7829a8a9e55d60a0f20b12584e6e99f693c2be524630e/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/home/pon/opt/docker-compose-public/rabbit/rabbitmq.conf",
                "Destination": "/etc/rabbitmq/rabbitmq.conf",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "volume",
                "Name": "688641acf65d94a530a70e9d18d1d47f71b0abc307202b6635066966ceabdcfb",
                "Source": "/var/lib/docker/volumes/688641acf65d94a530a70e9d18d1d47f71b0abc307202b6635066966ceabdcfb/_data",
                "Destination": "/var/lib/rabbitmq",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
        "Config": {
            "Hostname": "rabbitmq3-management-standalone",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "15671/tcp": {},
                "15672/tcp": {},
                "15691/tcp": {},
                "15692/tcp": {},
                "25672/tcp": {},
                "4369/tcp": {},
                "5671/tcp": {},
                "5672/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "RABBITMQ_DEFAULT_USER=pon",
                "RABBITMQ_DEFAULT_PASS=pon",
                "PATH=/opt/rabbitmq/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "OPENSSL_VERSION=1.1.1q",
                "OPENSSL_SOURCE_SHA256=d7939ce614029cdff0b6c20f0e2e5703158a489a72b2507b8bd51bf8c8fd10ca",
                "OPENSSL_PGP_KEY_IDS=0x8657ABB260F056B1E5190839D9C4D26D0E604491 0x5B2545DAB21995F4088CEFAA36CEE4DEB00CFE33 0xED230BEC4D4F2518B9D7DF41F0DB4D21C1D35231 0xC1F33DD8CE1D4CC613AF14DA9195C48241FBF7DD 0x7953AC1FBC3DC8B3B292393ED5E9E43F7DF9EE8C 0xE5E52560DD91C556DDBDA5D02064C53641C25E5D",
                "OTP_VERSION=25.1",
                "OTP_SOURCE_SHA256=a5ea27c1e07511a84bdd869c37f5e254f198c1cecf68ee9c8fedd23010750c31",
                "RABBITMQ_DATA_DIR=/var/lib/rabbitmq",
                "RABBITMQ_VERSION=3.11.0",
                "RABBITMQ_PGP_KEY_ID=0x0A9AF2115F4687BD29803A206B73A36E6026DFCA",
                "RABBITMQ_HOME=/opt/rabbitmq",
                "HOME=/var/lib/rabbitmq",
                "LANG=C.UTF-8",
                "LANGUAGE=C.UTF-8",
                "LC_ALL=C.UTF-8"
            ],
            "Cmd": [
                "rabbitmq-server"
            ],
            "Image": "rabbitmq:3-management",
            "Volumes": {
                "/etc/rabbitmq/rabbitmq.conf": {},
                "/var/lib/rabbitmq": {}
            },
            "WorkingDir": "",
            "Entrypoint": [
                "docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {
                "com.docker.compose.config-hash": "399ff03ea4dad853af6802b58fa9e1ef72ab3cbf15b8b3274774fa5deaa67650",
                "com.docker.compose.container-number": "1",
                "com.docker.compose.oneoff": "False",
                "com.docker.compose.project": "rabbit",
                "com.docker.compose.project.config_files": "docker-compose.yaml",
                "com.docker.compose.project.working_dir": "/home/pon/opt/docker-compose-public/rabbit",
                "com.docker.compose.service": "rabbitmq3-management",
                "com.docker.compose.version": "1.29.2"
            }
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "4b483110e190237d464b7adcecb57e6377de3b0f28667d75594e94bc8f5a62b9",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "15671/tcp": null,
                "15672/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "15672"
                    },
                    {
                        "HostIp": "::",
                        "HostPort": "15672"
                    }
                ],
                "15691/tcp": null,
                "15692/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "15692"
                    },
                    {
                        "HostIp": "::",
                        "HostPort": "15692"
                    }
                ],
                "25672/tcp": null,
                "4369/tcp": null,
                "5671/tcp": null,
                "5672/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "5672"
                    },
                    {
                        "HostIp": "::",
                        "HostPort": "5672"
                    }
                ]
            },
            "SandboxKey": "/var/run/docker/netns/4b483110e190",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "rabbit_default": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": [
                        "rabbitmq3-management",
                        "10eddc6ea83d",
                        "rabbitmq3-management-standalone"
                    ],
                    "NetworkID": "cf524f6eb943a332e73221fc9d0cd84febf439a615dfab8d4a7ba3c9099d8b71",
                    "EndpointID": "fa950241f86513c4a57de2acd687a305935ff1f00d9384755f548d029c2cab66",
                    "Gateway": "172.24.0.1",
                    "IPAddress": "172.24.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:18:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]              
回复
阅读 769
2 个回答

我记得deploy这个配置段是给swarm看的配置,如果你没用swarm是不会起作用的。你应该改到services下面的mem_limit配置:

version: "3.9"
services:
  redis:
    image: redis:alpine
    cpus: '0.50'
    mem_limit: 50M

官方文档有说明的,你应该没仔细看: https://docs.docker.com/compo...

在services/<app>/ 下的配置段的参数一般对应的是docker run的参数

铁子,vm_memory_high_watermark.relative 从字面理解,相对的,你设为0.8,估计你是32G内存吧,32G*0.8=25.6,你要想设置800MB,那需要

vm_memory_high_watermark.relative=0.025

希望能帮助到你。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏