【问题标题】:Reclaim memory after program exit程序退出后回收内存
【发布时间】:2011-11-03 20:27:03
【问题描述】:

这是我的问题:运行一套程序后,free 告诉我,执行后可用内存减少了大约 1 GB。经过一些搜索,我发现SO: What really happens when you dont free after malloc(据我了解)清楚地表明丢失的内存释放不应该是问题......(正确吗?)

top 没有显示任何使用大量内存的进程。

我如何才能找出内存“发生了什么”,即哪个程序分配了它以及为什么它在程序执行后不空闲?

free 在哪里收集其信息?

(我运行的是最新的 Ubuntu 版本)

【问题讨论】:

  • 这个内存真的没有空闲还是你的程序填满了磁盘缓存,你认为你的内存少了?
  • 在执行大约 1GB 之前和之后,free -m 告诉的内容有所不同
  • free 从 /proc/stat 和 /proc/meminfo 读取。
  • 编辑帖子并免费粘贴 -m 结果
  • Want to know whether enough memory is free on a linux machine to deploy a new application 的可能重复项(好吧,不是完全重复,但足够接近,答案肯定回答了这个问题)

标签: linux linux-kernel memory-management


【解决方案1】:

是的,您的程序使用的内存在您的程序退出后被释放。

“免费”中的统计数据令人困惑,但事实是内存可供其他程序使用:

http://kevinclosson.wordpress.com/2009/11/17/linux-free-memory-is-it-free-or-reclaimable-yes-when-i-want-free-memory-i-want-free-memory/

http://sourcefrog.net/weblog/software/linux-kernel/free-mem.html

这里有一个更好的活动链接:

http://www.linuxatemyram.com/

【讨论】:

    【解决方案2】:

    free (1) 是用词不当,应该更正确地称为unused,因为这就是它所显示的内容。或者它应该被称为physicalfree(或者,更准确地说,输出中的“空闲”列应该被命名为“未使用”)。
    您会注意到“缓冲区”和“缓存”往往会随着“免费”的下降而上升。内存不会消失,它只是被分配到不同的“桶”。

    空闲内存和未使用内存之间的区别在于,虽然两者都是“空闲”的,但未使用的内存确实如此(没有使用物理内存),而简单的“空闲”内存通常被移动到缓冲区缓存中。例如,所有可执行映像和库,只读或读执行的任何内容都是这种情况。如果稍后再次加载相同的文件,“空闲”页面将再次映射到进程中,并且不必加载任何数据。

    请注意,“未使用”实际上是一件坏事,尽管它不是很明显(听起来不错,不是吗?)。空闲(但在物理上使用)内存是有目的的,而空闲(未使用)内存意味着您也可以为 RAM 节省资金。因此,拥有未使用的内存(例如通过清除页面)正是您不想要的。
    令人惊讶的是,在 Windows 下存在许多“内存优化器”工具,它们花费真正的钱,而且它们就是这样做的......

    关于回收内存,它的工作方式很简单:操作系统只是删除对工作集中所有页面的引用。如果一个页面与另一个进程共享,则不会发生任何惊人的事情。如果它属于非匿名映射并且不可写(或可写且不可写),它会进入缓冲区缓存。否则,它会变得很糟糕。
    这将删除使用malloc 分配的所有内存以及可执行文件和文件映射使用的内存,以及(因为所有内存都基于页面)其他所有内容。

    【讨论】:

      【解决方案3】:

      可能是您的操作系统出于自己的目的占用了该空间。

      例如,许多现代操作系统会在程序终止后将程序加载到内存中,以防您想再次启动它们。如果他们的猜测是正确的,它可以节省大量时间,但代价是一些无论如何都没有使用的内存。有些操作系统甚至会推测性地加载一些常用程序。

      CPU 利用率的工作方式相同。通常,当 CPU 处于“空闲”状态时,您的操作系统会推测性地做一些工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-16
        • 2018-03-30
        • 2011-08-20
        • 1970-01-01
        • 2014-06-04
        相关资源
        最近更新 更多