我有一台运行 Debian Linux 的 Xen VM,它占用的 RAM 数量异常大。罪魁祸首可能是什么?我认为我已经排除了磁盘缓存、内核板使用和内存膨胀等常见原因。
free -h
显示:
total used free shared buff/cache available
Mem: 3.8Gi 3.6Gi 87Mi 0.0Ki 55Mi 33Mi
Swap: 1.0Gi 275Mi 748Mi
因此,虚拟机的 3.8 GiB RAM 几乎全部被使用,并且只有一小部分使用来自内核的磁盘缓存。
smem -kt
不将内存归属于任何进程:
PID User Command Swap USS PSS RSS
⋮
-------------------------------------------------------------------------------
52 1 214.4M 128.4M 133.2M 146.6M
smem -w -kt
说内存属于内核:
Area Used Cache Noncache
firmware/hardware 0 0 0
kernel image 0 0 0
kernel dynamic memory 3.6G -20205568.0 3.6G
userspace memory 133.6M 77.6M 56.0M
free memory 87.8M 87.8M 0
----------------------------------------------------------
3.8G 146.1M 3.6G
(而且,那个负数看起来很奇怪。)
/proc/meminfo
除其他事项外,还指出内核 slab 分配器仅负责大约 95 MiB 的 RAM 使用(并且也没有真正说明是使用 RAM):
MemTotal: 3973392 kB
MemFree: 89144 kB
MemAvailable: 41860 kB
Buffers: 5084 kB
Cached: 37972 kB
SwapCached: 30000 kB
Active: 52356 kB
Inactive: 77832 kB
Active(anon): 30756 kB
Inactive(anon): 56396 kB
Active(file): 21600 kB
Inactive(file): 21436 kB
Unevictable: 80 kB
Mlocked: 80 kB
SwapTotal: 1048572 kB
SwapFree: 775576 kB
Dirty: 104 kB
Writeback: 0 kB
AnonPages: 78660 kB
Mapped: 91004 kB
Shmem: 20 kB
KReclaimable: 28348 kB
Slab: 96740 kB
SReclaimable: 28348 kB
SUnreclaim: 68392 kB
KernelStack: 4288 kB
PageTables: 6768 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 3035268 kB
Committed_AS: 1697316 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 10028 kB
VmallocChunk: 0 kB
Percpu: 2352 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
FileHugePages: 0 kB
FilePmdMapped: 0 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 0 kB
DirectMap4k: 428032 kB
DirectMap2M: 3799040 kB
DirectMap1G: 0 kB
如果我正确理解了 Xen 内存的内容,系统并没有因为内存膨胀而损失太多的 RAM。 /sys/devices/system/xen_memory/xen_memory0/info/current_kb
包含4079228
,这与系统报告的 RAM 非常匹配。在同一目录中,high_kb
分别low_kb
包含0
和16384
。我相信这意味着 Xen 内存膨胀驱动程序只占用了 16 MiB 的 RAM。
我遗漏了什么?还有什么会占用这么多的系统内存?