有什么办法可以自动防止内存不足?

yut*_*mmo 4 ubuntu vps memory apache-2.2

我的 VPS ubuntu 服务器上的内存经常不足。我希望有一种方法可以在 apache2 开始耗尽内存时简单地重新启动它,因为这似乎可以解决问题。还是我懒得解决问题?我的服务器内存有限...

好的,更多信息:

我正在运行 apache2 prefork,这是我的内存设置(我一直在调整它们......):

StartServers         3
MinSpareServers      1
MaxSpareServers      5
MaxClients           150
MaxRequestsPerChild  1000
Run Code Online (Sandbox Code Playgroud)

VPS 有 1 GB 内存,运行 ubuntu 11.04 32 位。

至于脚本,我有一个包含 5 个博客的 wordpress 网络、一个 AskBot(一个 python/django stackexchange 克隆)的安装,以及一个没有真正使用过的 MediaWiki 的安装。还有一个自制的 mp3 脚本,它访问 getid3 库以显示有关播客列表的信息,它似乎抛出了一些 php 错误,不确定这是否是罪魁祸首......

Sun*_*nny 7

Apache 不应耗尽内存,除非您在 apache 下运行的应用程序中存在内存泄漏,或者某个请求对内存产生了巨大的需求。我会首先调查为什么我的内存不足,而不是像您要求的那样实施蛮力解决方案。

如上所述,实现一个基本的 cron 作业脚本应该非常简单,它只是在 apache 进程上调用“ps”,找出它们消耗了多少内存,并在需要时重新启动。每分钟运行一次就足够了。

但同样 - 这不是一个好方法。


Jod*_*e C 4

莫尼特可以做到这一点。

您可以使用配置行,例如:

 check process apache 
    with pidfile "/var/lock/apache/httpd.pid"
    start program = "/etc/init.d/httpd start" with timeout 60 seconds
    stop program = "/etc/init.d/httpd stop"
    if 2 restarts within 3 cycles then timeout
    if totalmem > 100 Mb for 5 cycles then restart
    if children > 255 for 5 cycles then stop
    if cpu usage > 95% for 3 cycles then restart
    if failed port 80 protocol http then restart
    group server
    depends on httpd.conf, httpd.bin
Run Code Online (Sandbox Code Playgroud)

(根据monit.com 上的配置示例修改)

这也可以发挥前面提到的 ulimit 选项的作用。

重新启动服务是一个创可贴。相反,您应该尝试找出它泄漏内存的原因。