我们已经将我们的网站之一移到了一个新的服务器上,而这个服务器偶尔完全挂起。 起初这种情况很less发生,也许每个月发生一次,但现在每天都会发生。 挂起,我的意思是说,所有的请求超时,并试图apache2ctl状态,或apache2ctl优雅的壳导致apache2ctl等待无限期。 只有发出一个apache2ctl重新启动将它从这个状态。 我似乎无法在apache错误日志中find任何东西,访问日志表明apache确实没有提供请求。
目前,服务器主要服务于一个单一的站点,一个类似于分享文件共享的门户网站,服务于1TB左右的数据。 它运行Ubuntu的清醒,有8GB的内存和一个四核心的英特尔至强CPU,与Apache-MPM-ITK和PHP 5.2.11。
它已经运行在它上面,而且在Apache挂起的时候,它显示了很multithreading(650+)。 通常的线程数量约为200个,大约1个小时的时间就达到650个。 在这个时候运行ps显示,确实是有很多孩子运行的apache。 CPU负载/内存使用似乎没有问题,目前它只使用1.1GB的RAM,负载为0.05。
我被告知Lighttpd或者nginx会是这类网站的更好的解决scheme。 我愿意切换,但我宁愿尝试使用此设置。 (旧的服务器也运行Apache)
是mpm-itk一个坏主意? 我主要select它是为了让每个虚拟主机在不同的用户下运行。 它运行在从包pipe理器拉出的默认configuration上,这是我知道的,但我不确定我应该调整哪些值。
我发布了一些可能相关的值,如有需要请咨询其他相关信息:
Timeout 300 KeepAlive on MaxKeepAliveRequests 100 KeepAliveTimeout 15 <IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0 </IfModule>
那么,我应该看什么样的价值呢? 有什么特别的,我应该grep日志?
如果您不需要mpm-itk提供的额外安全性,请使用mpm-worker,因为它比其他的更轻 。 可以想象,每个虚拟主机最终都会在自己的进程中运行,这将吸引更多的内存。