在可操作的web实例中查找Apache内存泄漏

在可操作的web实例中查找Apache内存泄漏,apache,debugging,memory-leaks,Apache,Debugging,Memory Leaks,我正在运行一个被大量使用的apache服务器,它托管网页、下载、svn(使用DAV svn)和一个Trac实例(使用mod_python)。Mod_deflate用于为用户保存bandwith。服务器存在严重的内存问题。通常在24小时后,它需要比重新启动后多2 GB的内存 我在trac系统中安装了一个垃圾收集器状态监视器,这表明python(以及trac)没有内存泄漏 现在我有点不知所措,不知道如何找到问题 任何帮助和建议在哪里寻找以及如何找到记忆增加的原因都会很有帮助。LogLevel设置为d

我正在运行一个被大量使用的apache服务器,它托管网页、下载、svn(使用DAV svn)和一个Trac实例(使用mod_python)。Mod_deflate用于为用户保存bandwith。服务器存在严重的内存问题。通常在24小时后,它需要比重新启动后多2 GB的内存

我在trac系统中安装了一个垃圾收集器状态监视器,这表明python(以及trac)没有内存泄漏

现在我有点不知所措,不知道如何找到问题

任何帮助和建议在哪里寻找以及如何找到记忆增加的原因都会很有帮助。LogLevel设置为debug,但是我在日志中没有发现任何有用的东西

系统使用Apache 2.2.22 worker mpm


目前,apache每24小时重新启动一次,作为解决方案。如果我为
maxRequestsParchild
(例如500)设置一个值,它似乎很快就会无响应(挂起连接?)。

如何测量使用的内存?无论如何,如果您将进程ID记录到日志文件(%P),并检查进程的大小,那么您可能会发现哪个请求使给定的进程过大。(如果有任何特定的请求)内存是通过使用“ps”和查看进程内存来测量的,因此不应该涉及缓存效果,而应该只涉及真实内存。记录流程ID是一个想法,但我怀疑它是否会有帮助,因为涉及的请求确实很多,我怀疑我是否有机会将其从ID分解到具体的调用。我真的不明白你的目标是什么?通常,这些进程不会占用更少的内存。您必须以某种方式针对有问题的请求,并尝试优化它们。我想…我同意,但我怀疑过程ID是否有助于这样做。每个进程处理的请求太多。我需要更精细的东西。像valgrind这样的东西可以,但我不能在重载apache上使用valgrind。还有一些东西可能是内部的apache统计数据,但到目前为止,我所发现的还不足以帮助追踪问题。我曾经写过一个软件,它有一个调试模式来输出所有内存请求和一些关于它们发生在哪里的信息(比如内部valgrind:-)。那很好。你应该看到这篇文章。它和你的文章很相似。