我的服务器(Debian 6.0)存在内存问题,其中安装了 Apache httpd 2.2、mod_php 和 APC。
实际上,httpd 似乎在等待 Mongodb 的答复时间过长(30 秒超时)时分配了所有可用内存(4GB)。好吧,我知道,30 秒的超时时间太长了。这种漫长的等待导致前端服务器开始交换内存,平均负载达到非常高的值(大约200),直到硬件完全卡住。
我想问题出在当前的 httpd 配置中,因为MaxClients
设置为 200 并且 PHP 内存限制为 128MB。在最坏的情况下,我们只需要每个 PHP 引擎至少 25GB RAM,但我们有 4GB。
- 128 兆字节 * 200 = 25 兆字节
我的拙见是:有了4GB,如果我们将php memory_limit缩小到96MB,我们应该支持大约48个fork(即MaxClients
48)。即使 Apache httpd 分叉了一个新子进程,大部分内存也会与父进程共享。
- 总内存 4GB = Apache 子级 96MB * 48
MaxClients
但是如何准确知道所有 httpd 子进程共享多少内存以及每个 apache httpd 进程分配多少内存?
而谈论PHP和APC,即使在这种情况下,如何知道每个引擎共享了多少内存以及分配了多少内存?