我在只有 1G RAM 的 amazon linux VM 上运行 apache 服务器(默认配置,mod_php)。
正在运行两种 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 可以创建的进程数量设置更严格的限制,这样 50MB 进程就会减少,但这会惩罚轻量级应用程序,因为现在处理其请求的进程更少了:
- 我怎样才能让 apache 更频繁地释放内存?
- 或者有比 apache 更好的工具吗?
答案1
我的回答部分内容这里可能相关。我们在内存受限的环境中运行 Apache,Apache 进程过去会逐渐耗尽所有可用内存。
我们通过减少每个子节点的最大连接数指令为 2500。在我们的流量水平下,这意味着子进程每小时回收大约两次,释放它们正在使用的内存。
或许你可以尝试一下。