运行mod_perl应用程序的Apachenetworking服务器暴露了不正常的内存使用情况 – “日负载”停止后,Apache进程耗尽系统内存,并调用oom_killer。 随着第二天早上的负载返回,内存使用正常化 – 可能是因为如果生成足够数量的命中,Apache工作人员会周期性地被回收:

这是每秒关联的apache点击量的图表: 
通过HAProxy检查导致整个晚上每秒的其余2次点击 – 它运行HEAD http://mydomain.example.com/running HTTP/1.0运行HEAD http://mydomain.example.com/running HTTP/1.0请求每半秒与“运行”是一个静态文件的服务器(即不调用任何Perl代码)。 这似乎也禁用这些检查补救内存使用问题,但显然不能成为一个解决scheme。
所有3个类似configuration的服务器(在HAProxy后面)都暴露了这种行为。 运行的操作系统是Ubuntu 10.10,Apache版本2.2.16。 这似乎是内存泄漏,但我不知道如何开始debugging它 – 任何提示?
这是因为perl代码中的内存泄漏。 早晨回收可能会在logrotate的时候完成。 最好的解决办法是使用fast-cgi而不是mod_perl,例如使用30个worker,所以每个人都在吃内存,所以如果每个人都经常回收100个请求,而不是1000或10000,那么无论如何都会消耗内存。 所以,如果你设置了8,16,32个fast-cgi worker(取决于你的RAM),并且每100页渲染就回收一次,这样就不会占用这么多的RAM,性能也不会降低。 而且,如果你可以在不同用户的不同fast-cgi worker之间进行模块拆分,那么你将获得更高的安全性。理想情况下,你还可以设置SELinux来隔离这些账号。