我们有一个 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。