我正在一个亚马逊linux虚拟机上运行一个Apache服务器(默认configuration,mod_php),只有1G内存。
有两种php应用程序正在运行:内存很重,而不是经常执行(httpd进程的大小每个都是50MB),而内存指针则经常执行。
当我重新启动Apache并查看httpd进程的大小时,它看起来像这样:
sudo service httpd restart ps aux | grep 'httpd' | awk '{print $6/1024 " MB";}' 24.7266 MB 14.9805 MB 14.9805 MB 14.9805 MB 14.9805 MB 14.9805 MB 2.00391 MB
当我https://只是一个内存沉重的PHP应用程序(一个Drupal 7安装)相同的命令输出:
24.7266 MB 14.9805 MB 47.0195 MB 18.6133 MB 18.5781 MB 18.582 MB 14.9805 MB 14.9805 MB 14.9805 MB 14.9805 MB 14.9805 MB 14.9805 MB 14.9805 MB 2.05078 MB
问题是,即使服务器空闲,它也会保留一些大型的50MB进程来处理内存繁重的drupal请求。 最终当我得到太多这些使用几乎所有的服务器内存,所以我不能使用服务器的其他任何东西。 我可以对httpd可以创build的进程数量设置一个更严格的限制,这样会有更less的50MB进程,但是会惩罚轻量级应用程序,因为现在有更less的进程来处理它们的请求:
我在这里回答的部分内容可能是相关的。 我们在内存受限的环境中运行Apache,并且Apache进程用来逐渐耗尽所有可用的内存。
我们通过将MaxConnectionsPerChild指令减less到2500来治愈它。在我们的stream量级别,这意味着subprocess每小时回收两次,释放他们正在使用的内存。
也许你可以试试。