我free -m
在 Hyper-V 上运行的 Debian VM 上运行:
total used free shared buffers cached
Mem: 10017 9475 541 147 34 909
-/+ buffers/cache: 8531 1485
Swap: 1905 0 1905
因此,在我的 10GB 内存中,有 8.5GB 正在使用,只有 1500MB 可用(不包括缓存)。
但我很难找到什么在使用内存。的输出ps aux | awk '{sum+=$6} END {print sum / 1024}'
(应该将 RSS 利用率相加)为:
1005.2
换句话说,我的进程仅使用 1GB 内存,但整个系统(不包括缓存)使用 8.5GB。
剩下的 7.5GB 可以用来做什么?
ps:我有另一台具有类似配置的服务器,显示已用内存为 1200(可用内存 = 8.8GB),并且 ps 中的 RSS 使用量总和为 900,这更接近我的预期...
编辑
cat /proc/meminfo
在机器 1 上(内存不足):
MemTotal: 10257656 kB
MemFree: 395840 kB
MemAvailable: 1428508 kB
Buffers: 162640 kB
Cached: 1173040 kB
SwapCached: 176 kB
Active: 1810200 kB
Inactive: 476668 kB
Active(anon): 942816 kB
Inactive(anon): 176184 kB
Active(file): 867384 kB
Inactive(file): 300484 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 1951740 kB
SwapFree: 1951528 kB
Dirty: 16 kB
Writeback: 0 kB
AnonPages: 951016 kB
Mapped: 224388 kB
Shmem: 167820 kB
Slab: 86464 kB
SReclaimable: 67488 kB
SUnreclaim: 18976 kB
KernelStack: 6736 kB
PageTables: 13728 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 7080568 kB
Committed_AS: 1893156 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 62284 kB
VmallocChunk: 34359672552 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 67520 kB
DirectMap2M: 10418176 kB
cat /proc/meminfo
在机器 2 上(正常内存使用):
MemTotal: 12326128 kB
MemFree: 8895188 kB
MemAvailable: 10947592 kB
Buffers: 191548 kB
Cached: 2188088 kB
SwapCached: 0 kB
Active: 2890128 kB
Inactive: 350360 kB
Active(anon): 1018116 kB
Inactive(anon): 33320 kB
Active(file): 1872012 kB
Inactive(file): 317040 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 3442684 kB
SwapFree: 3442684 kB
Dirty: 44 kB
Writeback: 0 kB
AnonPages: 860880 kB
Mapped: 204680 kB
Shmem: 190588 kB
Slab: 86812 kB
SReclaimable: 64556 kB
SUnreclaim: 22256 kB
KernelStack: 10576 kB
PageTables: 11924 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 9605748 kB
Committed_AS: 1753476 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 62708 kB
VmallocChunk: 34359671804 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 63424 kB
DirectMap2M: 12519424 kB
答案1
我知道您正在使用 Hyper-V,但概念是相似的。也许这会让你走上正轨。
您的问题可能是由于虚拟内存膨胀造成的,这是虚拟机管理程序用于优化内存的技术。看此链接的描述
我在 vSphere 中的虚拟机上观察到与您完全相同的症状。一台没有运行任何东西的 4G 机器会报告缓存使用了 30M,但在“-/+ 缓冲区”行中“使用”了超过 3G。
以下是 VMWare 统计命令的输出示例。这显示了我的“已用”金额与 3G 的接近程度:
vmware-toolbox-cmd stat balloon
3264 MB
就我而言,很明显,我的气球司机正在使用〜3G
我不确定 Hyper-V 中获取气球统计信息的类似命令是什么,但我确信您会得到类似的结果
答案2
https://serverfault.com/questions/85470/meaning-of-the-buffers-cache-line-in-the-output-of-free
简短的回答:内核使用缓冲区/高速缓存来执行各种任务,例如缓存文件。如果需要,该内存可供应用程序使用,因此您所说的已使用 944 MB 是正确的。