如何在 Linux 上释放内存

如何在 Linux 上释放内存

当我使用 top 查看内存使用情况时,我有 65gb 内存,但只有 1.3gb 可用,其余显示为已使用。当我运行我的程序时,它给出内存不足错误。虽然没有其他程序正在使用剩余的 63.7gb 内存,但它被占用了。我如何释放未使用的内存?

答案1

重复项太多,无法列出。但长话短说,内存被用作缓存和缓冲区,并将随着应用程序消耗更多实际内存而被释放。

答案2

如果您不想使用内存,请将其从计算机中取出并放在桌子上。

一个常见的误解是空闲的 RAM 是好事。实际上,空闲的 RAM 字节代表系统无法有效利用该 RAM。空闲的 RAM 不会让您的系统运行得更快。

考虑一个过于简单的场景。一个程序运行,然后结束。您的操作系统有两个选择:

1) 它可以释放保存程序的内存。这需要特定操作才能释放它,并且需要特定操作才能再次使用它。如果程序再次运行,则必须从磁盘加载它。

2) 无法释放程序所用的内存。这需要操作来释放它,但稍后可能需要执行特定操作来将其移至其他用途。如果程序再次运行,则不必从磁盘加载它。

因此,在大多数情况下,选项 2 是纯粹的胜利。如果需要将内存用于其他用途,它可以节省操作(它可以在一个步骤中从一种用途切换到另一种用途,而不是两个步骤,一个步骤是释放内存,另一个步骤是释放内存)。而且它可以节省程序从磁盘加载的麻烦,这将是一个巨大的胜利。

因此,简而言之,您不想要免费的 RAM。

答案3

dylan@oxide:~$ free -m
             total       used       free     shared    buffers     cached
Mem:           123        120          3          0         34         35
-/+ buffers/cache:         50         72
Swap:          243          0        243

+/- 缓冲区行是您的实际内存使用情况。您尝试运行什么程序?很可能实际上不是缺少可用内存,而是其他问题。

您是否正在此机器上运行 PAE 模式下的 32 位操作系统?您的应用程序可能需要超过 2GB 的虚拟地址空间,而 PAE 无法提供。(内核重新编译可以将其提升至 3GB,但如果是这种情况,您最好还是使用 64 位。)

答案4

尝试 :

echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches

这将立即释放大量内存。

相关内容