LXC 容器内的“隐藏”内存使用率非常高

LXC 容器内的“隐藏”内存使用率非常高

我们有一个 Proxmox VE(内核 5.3)集群,使用 LXC 运行一些 IT 服务,其中之一用作整个内网的网关。它使用 Debian 映像进行设置,并使用 iptables 进行转发和 NAT。我们经常看到这个容器中的内存使用率高得离谱,而且它刚刚死掉了(内存和交换都已满)。

htop报告完整内存使用情况,但列出的进程(RES 列)总计不到 100 MiB:

顶部

主机 cgroup 控制器报告以下各项的完整使用情况memory.usage_in_bytes

root@proxmox:/sys/fs/cgroup/memory/lxc/100# cat memory.kmem.usage_in_bytes
47140864
root@proxmox:/sys/fs/cgroup/memory/lxc/100# cat memory.usage_in_bytes
1066528768

在主机上写入 3/proc/sys/vm/drop_caches不会对容器产生任何可见的影响。

“额外”的内存在哪里?如何补救?

答案1

我遇到了类似的问题。
在我的 LXD 容器中运行的每个 cronjob 都会创建一个新的临时用户切片,如下所示:

● session-c48037.scope - Session c48037 of user apache
   Loaded: loaded (/run/systemd/transient/session-c48037.scope; transient)
Transient: yes
   Active: active (abandoned) since Tue 2023-05-02 16:24:02 CEST; 13min ago
    Tasks: 0
   Memory: 352.0K
   CGroup: /user.slice/user-48.slice/session-c48037.scope

May 02 16:24:02 pos34 systemd[1]: Started Session c48037 of user apache.

由于我还不明白的原因,在 cronjobs 完成后,会话从未被清理过。
千字节内存随着时间的推移而增加,并导致内核本身消耗非常高的内存,如SUnreclaim中所述/proc/meminfo
因此,虽然这不能回答“如何补救这个问题?”,但它可能是“额外内存在哪里?”的答案。

这是在具有 RockyLinux 8.7 LXD 客户机的 Ubuntu 20.04 主机系统上观察到的。通过 Snap 安装 LXD 版本 4.0.9。

相关内容