Ubuntu 9.10服务器需要经常重启才能释放内存

我在我的服务器上运行Ubuntu 9.10。 它工作正常,只是随着时间的推移(通常是几天),内存使用刚刚增长和增长,直到它总是用完,需要重新启动。

它运行着Apache,Samba,ProFTPd,Postfix,Munin&Webmin。

有没有什么可以做的,以释放它不再需要的内存?

取决于你如何计算使用的内存。 如果你正在看“免费”,一定要打折使用的caching和缓冲区。

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

例如:

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

在这种情况下,虽然系统报告几乎所有的4G内存使用,但仔细检查表明,它的3G是“caching”,这意味着实际上有足够的内存。 free输出的第二行代表计算 – 不包括缓冲区和caching,有3.5G可用内存。

你不需要重新启动你的服务器来释放内存。 使用top命令来确定哪个进程使用内存并重新启动,并尝试诊断导致内存消耗exception的原因。

对于你的问题的可能原因,这是在黑暗中的一个镜头,但有一个众所周知的内存泄漏console-kit-daemon ,一个Ubuntu特定的守护进程,你可以杀死和从rcX.d中删除。

Google上关于Linux资源配额的信息。 我也想看看哪个进程正在膨胀起来,占用所有的内存。 你没有提到你在这个系统上有多less内存, 是否只是需要为服务器获得更多内存? 没有看资源的使用情况,看看什么是什么进程,你不知道是否只是缓慢的内存使用,或者如果有资源泄漏/应用程序问题导致它。

有多less用户打这个服务器? 什么是工作量? 它已经有多less内存了? 内存问题发生之前,之中和之后,日志中是否有什么错误?

我还要指出,使用资源限制/配额将意味着build立一个进程作为看门狗来重新启动被杀死的进程,并且这样做并不是很干净,因为它可能会迫使进程和其他依赖在磁盘I / O或数据库可能不会像突然被杀掉。 您可能需要专注于查找哪个进程是麻烦制造者并修复或隔离它。 更糟糕的是,你可能会遇到这样的攻击,导致内存使用膨胀,或失控的cron工作,类似的东西。 杀死进程或重新启动并不能解决问题,这有助于隐藏问题。

如果问题只在缓冲区和caching中,你可以强制内核放弃它们。 做就是了:

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

回声2> / proc / sys / vm / drop_caches(免费dentries和inode)

echo 3> / proc / sys / vm / drop_caches(释放pagecache,dentries和inode)