Buffers+Cached+Free = 3,588,092 (3.4G) 但我仍然可以使用 10G 内存(不使用交换)。这是内存泄漏问题吗?这样做之后,泄漏的内存可以恢复吗?
- (人为定义的)可用内存为 3,588,092(假设为 3.4G),总内存为 32G
- 在此步骤中,我们没有通过命令“top”发现任何占用大量内存的进程,因此我们认为 3.4G 的可用内存是不正确的,我们 100% 确定可用内存至少为 20G
- 我们把内存挂载到本地,然后往里面写入数据,可以看到有10G了,成功了
- 卸载后,可用内存增加到 11,959,064,这是怎么回事?
谢谢
[root@dev001 ~]# free
total used free shared buffers cached
Mem: 32877844 31422864 1454980 0 1358500 774612
-/+ buffers/cache: 29289752 3588092
Swap: 1048568 67984 980584
[root@dev001 ~]# mkdir /mnt/ramdisk
[root@dev001 ~]# mount -t tmpfs -o size=10g tmpfs /mnt/ramdisk
[root@dev001 ~]# cd /mnt/ramdisk/
[root@dev001 ramdisk]# dd if=/dev/zero of=1g bs=1024 count=$((1024*1024*10))
10485760+0 records in
10485760+0 records out
10737418240 bytes (11 GB) copied, 20.0645 s, 535 MB/s
[root@dev001 ramdisk]# ls -lh
total 10G
-rw-r--r-- 1 root root 10G Jul 26 21:09 1g
[root@dev001 ramdisk]# free
total used free shared buffers cached
Mem: 32877844 32630940 246904 0 792364 10901876
-/+ buffers/cache: 20936700 11941144
Swap: 1048568 67984 980584
[root@dev001 ~]# umount /mnt/ramdisk
[root@dev001 ~]# free
total used free shared buffers cached
Mem: 32877844 22128348 10749496 0 792416 416160
-/+ buffers/cache: 20919772 11958072
Swap: 1048568 67984 980584
[root@dev001 ~]# free
total used free shared buffers cached
Mem: 32877844 22127372 10750472 0 792432 416160
-/+ buffers/cache: 20918780 11959064
Swap: 1048568 67984 980584
答案1
首先,建议阅读 http://www.linuxatemyram.com/因为它总是有助于理解 Linux 内存管理。
也许你应该记住,有趣的概念是“可用”和“不可用”内存。空闲内存是可用的。缓冲区/缓存使用的内存也可能是可用的,但如果没有理由,内核不会释放该内存。当你创建 10GB 的 ramdisk 时,它可能会释放其中一些缓冲区或缓存对象,因此当 ramdisk 被销毁时,你会得到更多的空闲内存(尽管它总是“可用的”)。我希望这有助于理解内存管理(但认真地,请阅读上面的链接 :D )
最后要注意的是,top
您还可以使用它slabtop
来获取有关内部内存使用情况的一些信息。