2011-02-23 97 views
1

根据请求,我们正在使用大量内存的单个apache进程出现问题,并且从不将它释放回主系统。由于这些请求可能随时发生,因此随着时间的推移,Web服务器被推送到交换中,即使对SSH也无法响应。更糟糕的是,在请求完成后,Python无法将内存释放回野生环境,导致数个500mb-1gb的Apache进程处于闲置状态。在mod_python中杀死单个Apache进程

我们每秒推送很少的请求,但每个请求都有可能非常大。

我想要做的是有一种方法来杀死一个单独的apache进程的孩子,如果它的驻留内存超过了一定的阈值,完成服务请求。我尝试了几种在mod_python中实际执行此操作的方法,但似乎任何形式的系统退出都会导致响应未完成到客户端。

在优化所有进程(我们真正想要避免的)时,除非发生这种情况,否则无论如何要告诉Apache在完成服务请求后任意地终止进程?所有想法都欢迎。

作为一个额外的警告,由于系统的传统特性,我们无法升级到更高版本的Python,所以我们无法利用改进的2.5内存性能。同样,我们坚持使用我们当前的操作系统。

版本: 系统:红帽企业4

的Apache:2.0.55

的Python:2.3.5

+0

为什么要移动到一些不死的东西,比如mod_wsgi而不是一个选项? – 2011-02-23 19:36:30

+0

时间限制主要。最终这就是计划,但是我们使用的框架需要一些真正的工作来迁移。我们希望黑客能够在这个版本中满足要求,并在接下来的版本中换出mod_python。 – Andrew 2011-02-23 19:55:17

回答

0

我会说,即使有可能,这将是一个巨大的hack(和不稳定) - 在这种情况下,你应该建立一个外部于apache的进程,当超出内存/时间预定义的限制时,监督正在运行的进程并杀死一个单独的apache。

这样的脚本可以持续运行,主循环每隔几秒执行一次检查,甚至可以放在crontab中以便每分钟运行一次。

我看不出有任何理由尝试从服务过程本身。

+0

我已经为进程失控的进程编写了一个收割者守护进程,但是我希望找到一个解决方案,让这些长时间运行的进程之一有机会完成,然后优雅地退出。 – Andrew 2011-02-24 15:28:00

+0

@Andrew我认为它是“仍然在浏览器中打开时运行”。这接近于“失去控制的流程”。你可以分享这个守护进程吗?我很感兴趣。 Pastebin可能?谢谢。 – erm3nda 2015-09-19 03:15:13