我们遇到了使用大量内存的单个apache进程的问题,具体取决于请求,并且永远不会将其释放回主系统。由于这些请求可以随时发生,因此随着时间的推移,Web服务器将被推送到交换中,使其即使对SSH也没有响应。更糟糕的是,在请求完成之后,Python无法将内存释放回野外,这导致了大约500mb - 1gb的Apache进程。
我们每秒推送的请求非常少,但每个请求都有可能非常繁重。
我想要做的是,如果其驻留内存超过某个阈值,则可以在完成提供请求后杀死单个apache进程子进程。我已经尝试了几种在mod_python中实际执行此操作的方法,但似乎任何形式的系统退出都会导致响应无法完成到客户端。
除了优雅的所有进程(我们真的想避免),无论何时发生,无论如何都要告诉Apache在完成提交请求后任意终止进程?欢迎所有的想法。
作为一个额外的警告,由于系统的遗留性质,我们无法升级到更高版本的Python,因此我们无法利用2.5的改进内存性能。同样,我们仍然坚持使用当前的操作系统。
版本: 系统:Red Hat Enterprise 4
Apache:2.0.55
Python:2.3.5
答案 0 :(得分:0)
我会说,即使它有可能,也会是一个巨大的黑客攻击(并且不稳定) - 在这种情况下你应该设置一个apache外部的进程,这将监督正在运行的进程并杀死一个单独的apache超出了内存/时间预定义的限制。
这样的脚本可以持续运行,主循环每隔几秒执行一次检查,或者甚至可以放在crontab中每分钟运行一次。
我认为没有理由在服务流程本身内尝试这一点。