这是内存泄漏问题吗?

这是内存泄漏问题吗?

Buffers+Cached+Free = 3,588,092 (3.4G) 但我仍然可以使用 10G 内存(不使用交换)。这是内存泄漏问题吗?这样做之后,泄漏的内存可以恢复吗?

  1. (人为定义的)可用内存为 3,588,092(假设为 3.4G),总内存为 32G
  2. 在此步骤中,我们没有通过命令“top”发现任何占用大量内存的进程,因此我们认为 3.4G 的可用内存是不正确的,我们 100% 确定可用内存至少为 20G
  3. 我们把内存挂载到本地,然后往里面写入数据,可以看到有10G了,成功了
  4. 卸载后,可用内存增加到 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来获取有关内部内存使用情况的一些信息。

相关内容