apache 内存不释放原因
MaxRequestsPerChild这个参数是说,apache进程在处理了多少个请求之后,必须退出,重新开始,以免在处理中的内存问题。对于php脚本来说,把这个参数设置的小一些是有好处的,可以避免程序使用的内存持续增长对apache带来的压力:让这个参数定期释放内存,因为php是在脚本执行完毕后,自动释放只用的资源(内存)的。比如设置为50?如果太小的话,重新产生一个apache进程也是要消耗资源的,这是一个平衡问题。
apache的主流工作模式MPM模式。MPM是Multi-Processing-Modules的简称,意思是多道处理模块。MPM模块有不同的种类。现在用的比较多的MPM种类主要是prefork和worker。prefork的工作方式是多个进程工作,每个进程会在处理一定数量的请求后结束(这个数量可能是无穷),没有线程的概念。worker被看作apache未来的主流工作模式,它是一种多进程与多线程混合的模式。总的来说,prefork方式速度要稍高于worker,然而它需要的cpu和memory资源也稍多于woker。
修改配置文件来解决
找到 MaxClients, 可能有多个. 改为7
找到 MinSpareServers, 改为 MaxClients 的 10-25%, 7 * 0.25 ≈ 2
找到 MaxSpareServers, 改为 MaxClients 的 25-50%, 7 * 0.5 ≈ 4
找到 StartServers, 设置为 MinSpareServers 或 MaxSpareServers 的值
找到 MaxRequestsPerChild, 改为1000, 小于1000的不用改
prefork 控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。
保存,重启 httpd
apache性能测试
Apache服务器自带有一个叫AB(ApacheBench)的工具,在bin目录下。ab可以针对某个特定的 URL 仿真出连续的联机请求,同时还可以仿真出同时间点数个相同的联机请求,因此利用 ApacheBench 可帮助我们在网站开发期间仿真实际上线可能的情况,利用仿真出来的数据作为调整服务器设定或程序的依据。
抓猫wifi社区提供