【系统版本】X86
【设备环境】虚拟机(VMware ESXi 上的 VM,vmw_pvscsi/vmxnet),局域网访问。系统版本 fnOS 1.1.3107,内核 6.18.18-trim,Debian 12 (bookworm) x86_64,4 vCPU / 7GB 内存。
【BUG现象】
开机后系统内存随运行时间持续单调上涨,数天后 used 接近满(约 6.6G/7G),available 仅剩约 150MB 并开始使用 swap,系统明显变卡。只有重启能恢复,重启后 used 回落到约 1.8G,之后再次缓慢涨满。
经排查,基本确定是内核态内存泄漏,不是用户程序或缓存占用:
- 满载时所有用户进程 RSS 合计仅约 1.4G,buff/cache 仅约 260MB —— 排除应用/缓存。
free -h(满载时):Mem used 6.6Gi / available 212Mi;Swap used 1.0Gi。
- /proc/slabinfo:kmalloc-256 约 460 万个对象、约 1.1GB(kmalloc-32 也有约 116 万对象)。
- /proc/meminfo(满载时):SUnreclaim 约 1.27GB、Slab 约 1.32GB、AnonPages 约 536MB、Cached 约 250MB、Vmalloc 约 82MB。
常规类别加总仅约 2.2GB,但 used 约 6.6GB —— 还有约 4.3GB 内存不属于 meminfo 任何类别,疑似驱动直接 alloc_pages 的**页泄漏。
- dmesg 每约 1 分钟持续输出(疑似 trimafs / trim-mounts 内核模块):
[trim-mounts-hash] 1000 xxxx s top mountpoint dentry: run
[trim-mounts-hash] dentry run type: 0
- echo 3 > /proc/sys/vm/drop_caches 无法回收该内存;已排除 VMware balloon(/sys/kernel/debug/vmmemctl target=0、current=0,未膨胀)、ZFS ARC(arcstats size=0)、KVM 虚拟机(无 qemu)。
- 内核 taint = 12353(含 out-of-tree / unsigned 模块)。环境中挂载了 阿里云盘/夸克/rclone 的 WebDAV 云盘(经 fnOS 挂载管理器的 rclone rcd),怀疑这些 FUSE 挂载活动在触发 trimafs/trim-mounts 的 dentry/挂载哈希路径导致泄漏。
【出现频率】必现(随运行时间累积,数天必满,仅重启可恢复)。
【复现路径】正常使用(含上述 WebDAV 云盘挂载),持续运行数天观察内存,即可见 used 单调上涨、SUnreclaim 与 kmalloc-256 同步增大,仅重启可恢复。