当我查看系统监视器时,它报告我只使用了 48% 的内存。与 gkrellm 相同。但所有命令行实用程序的报告都不同。这是 free 和 /proc/meminfo 的输出。我能想到的唯一原因是图形实用程序忽略了缓存计数。但这不是仍然存储在物理内存中吗?为什么两者(图形和命令行)之间有这样的区别。缓存不重要吗?
提前致谢
自由-o
total used free shared buffers cached
Mem: 1915936 1831836 84100 0 11280 874072
Swap: 3866620 146944 3719676
猫 /proc/meminfo
MemTotal: 1915936 kB
MemFree: 81740 kB
Buffers: 11900 kB
Cached: 869224 kB
SwapCached: 4128 kB
Active: 722020 kB
Inactive: 887300 kB
Active(anon): 669976 kB
Inactive(anon): 235424 kB
Active(file): 52044 kB
Inactive(file): 651876 kB
Unevictable: 50812 kB
Mlocked: 0 kB
SwapTotal: 3866620 kB
SwapFree: 3719680 kB
Dirty: 460 kB
Writeback: 0 kB
AnonPages: 776964 kB
Mapped: 52052 kB
Shmem: 126384 kB
Slab: 77824 kB
SReclaimable: 37580 kB
SUnreclaim: 40244 kB
KernelStack: 2800 kB
PageTables: 33836 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 4824588 kB
Committed_AS: 2622452 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 560312 kB
VmallocChunk: 34359122920 kB
HardwareCorrupted: 0 kB
AnonHugePages: 118784 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 12288 kB
DirectMap2M: 1949696 kB
答案1
/proc/meminfo 的详细信息是
MemTotal:可用内存总量(即物理内存减去一些保留位和内核二进制代码)
MemFree:是 LowFree+HighFree 的总和(总体统计)
内存共享:0;出于兼容性原因,但始终为零。
SwapCache:曾经被换出的内存会被换回,但仍然位于交换文件中(如果需要内存,则不需要再次换出,因为它已经在交换文件中。这可以节省 I/O)
/proc/meminfo中描述的cache是pagecache(diskcache)中的Memory减去SwapCache见这里和这个解释这里
gkrellm 告诉它计算可用内存和已用内存
这里的已用内存和可用内存是根据内核报告的已用内存和可用内存减去或加上缓冲区和高速缓存来计算的。请参阅自述文件并与 free 命令中的“-/+ buffers/cache:”行进行比较。如果显示三个内存 krell,则内核“原始空闲”是最右边的 krell 之后的空间。
如果运行, free -m
您将看到“缓冲区”和“缓存”列,它们告诉您内核用于文件系统缓冲区等的内存量。
当应用程序尝试分配超过“空闲”的数据时,这种缓存的数据将被内核释放,这就是为什么“-/+ buffers/cache”行确实是您在使用时需要注意的重要行。正在检查系统上的可用内存。看这里
答案2
从性能角度来看,缓存很重要。但是对于空闲内存:当某些东西需要比可用内存更多的内存时,一些缓存内存将被自动释放。