Ubuntu:内存泄漏

Ubuntu:内存泄漏

我无法找到内存泄漏发生的位置。我在 Dell XPS M1530 上运行 Ubuntu 8.04 LTS。我有 3GB 的 RAM,我发现使用大约一个小时后,top 显示使用了 2GB 以上。奇怪的是,当我从 top 或 ps aux 按 PID 加总内存百分比时,我发现我应该只使用了大约 20-25% 的可用 RAM。

引起我注意的原因是,我又开始运行 vmware 服务器了。现在,当我加载虚拟机时,内存使用量显然会激增,但 VMware 使用的内存并不占我通过 top 或 free 看到的内存使用量。停止 vmware 服务器会释放分配给它的内存,但我仍然无法找到这些内存的使用位置。当然,在完全重启后,内存就没问题了,但很快使用率就会上升到 60-80%,而进程似乎只占了其中的三分之一。有什么想法我应该在哪里查找有关这可能是什么的更多信息?

答案1

你到底有没有使用交换功能?

如果没有的话我就不用担心了。Linux 喜欢使用空闲内存来缓存磁盘块。

如果您确信确实存在内存泄漏,我会调查您使用的驱动程序。仅二进制驱动程序很难调试,所以我预计它们可能有泄漏。

答案2

恭喜,这是“伤害” Windows 7 用户的同一个“错误” :) Linux 使用(至少在过去十年中一直如此)未使用的 RAM 来缓存磁盘和缓冲各种数据。微软最近意识到这是一个非常好的主意,最近很多人都抱怨这一点。搜索“windows 7 内存泄漏”很有趣 :)

答案3

使用命令“free”检查“实际”内存使用情况。请注意,Linux 会尽可能长时间地将内容保留在内存中,因为您可能会再次使用它。因此,它会占用大量的缓存/缓冲区内存。

编辑回应 Keeners 的评论:

             total     used     free   shared  buffers   cached
Mem:       4058084  3974976    83108        0    89152  3520952
-/+ buffers/cache:   364872  3693212
Swap:      2040212   157048  1883164

您是否检查过“-/+ buffers/cache”这一行(我怀疑您是否能在 top 中看清楚),那么这一行中是否还有很少的可用空间?因为正如您在我示例中看到的,这是“真正的”可用内存,而在第一行或 top 中,您只能看到一个相当无用的 free 值。现在我只想确保您理解输出,因为如果您已经像您所说的那样查看了 free,您就会发现您没有泄漏,您的机器只是在缓存,就像您在解决方案的最后评论中所说的那样。

答案4

您可以尝试以下命令来释放缓存,而无需重新启动服务器。检查top命令前后的内容。

echo 1 > /proc/sys/vm/drop_caches

相关内容