Ubuntu 9.10 服务器需要频繁重启以释放内存

Ubuntu 9.10 服务器需要频繁重启以释放内存

我的服务器上运行的是 Ubuntu 9.10。它运行良好,只是随着时间的推移(通常是几天),内存使用量会不断增长,直到内存耗尽,需要重新启动。

它运行 Apache、Samba、ProFTPd、Postfix、Munin 和 Webmin。

有什么办法可以释放不再需要的内存吗?

答案1

取决于您如何计算已用内存。如果您查看的是“空闲”,请确保扣除已使用的缓存和缓冲区。

Linux 会尝试缓存尽可能多的磁盘活动,以便后续访问这些文件的速度比再次访问磁盘要快得多。如果需要内存,则会释放缓存以满足新请求。

例如:

# free
         total       used       free     shared    buffers     cached
Mem:       3973040    3944864      28176          0     433448    3123468
-/+ buffers/cache:     387948    3585092
Swap:      2040244      72080    1968164

在这种情况下,虽然系统报告几乎所有 4G 内存都已使用,但仔细检查会发现其中 3G 是“缓存的”,这意味着实际上有足够的内存可用。输出的第二行free代表了这一计算——排除缓冲区和缓存,有 3.5G 可用内存。

答案2

您无需重启服务器来释放内存。使用命令top确定哪个进程使用了​​内存,然后重启它并尝试诊断导致内存消耗异常的原因。

对于您问题的可能原因,这有点像瞎猜,但有一个出色地-已知内存泄漏console-kit-daemon,这是 Ubuntu 特定的守护进程,您可以直接将其从 rcX.d 中终止并删除。

答案3

在 Google 上搜索有关 Linux 资源配额的信息。我还会查看哪些进程正在膨胀并占用所有内存。您也没有提到系统上有多少内存;这只是您需要为服务器获取更多内存的情况吗?如果不观察资源使用情况并查看哪些进程受到影响,您就不知道这只是内存使用逐渐占用还是资源泄漏/应用程序问题导致的。

有多少用户正在访问该服务器?工作量是多少?它已经有多少内存?在内存问题发生之前、期间和之后,日志中有哪些错误(如果有的话)?

我还要指出的是,使用资源限制/配额将意味着设置一个进程作为看门狗来重新启动被终止的进程,这样做不太干净,因为它可能会强制终止进程,而依赖磁盘 i/o 或数据库的进程可能不喜欢被突然终止。您可能希望专注于找出哪个进程是麻烦制造者并修复或隔离它。更糟糕的是,您可能正在遭受攻击,导致内存使用量激增,或者 cron 作业失控,诸如此类。终止进程或重新启动并不能解决问题,它只是帮助隐藏问题。

答案4

如果问题仅出在缓冲区和缓存上,您可以随时强制内核删除它们。只需执行以下操作:

echo 1 > /proc/sys/vm/drop_caches (释放页面缓存)

echo 2 > /proc/sys/vm/drop_caches (释放 dentry 和 inode)

echo 3 > /proc/sys/vm/drop_caches (释放页面缓存、dentry 和 inode)

相关内容