我有一个VPS在Centos上运行apache-php-mysql,并安装了一个drupal网站。 VPS有256MB的RAM(可能是我所有问题的根本原因…也许我只是需要更多)。 每当我尝试从多个浏览器标签(大约8 …不是800)一次打开我的网站,Apache崩溃! 我在日志上有这个:
[致命错误] [客户端xxx] PHP致命错误:内存不足(分配28049408)(试图分配201335字节)在xxx行2139,referer:xxx
我在这里读了许多许多post,但我认为有一些基本的东西是我缺less的 – 如果我理解正确的话,一些php脚本在分配28MB后试图分配200K,并且没有这样做。
第一个问题是:这应该导致Apache崩溃?
接下来,我尝试着看“顶”命令,而我做我的小testing。 事实上,我看到7个httpd进程,每个预留大约30MB – 这就解释了为什么我的RAM耗尽。
如何防止apache创build新的进程,直到内存不足?
我尝试像这样configuration/etc/httpd/conf/httpd.conf:
<IfModule prefork.c> StartServers 1 MinSpareServers 1 MaxSpareServers 1 ServerLimit 1 MaxClients 1 MaxRequestsPerChild 100 </IfModule>
但得到了同样的确切结果!
我错过了什么?
非常感谢!
更新:
我的PHP memory_limit是128M(由drupalpipe理页面确认…)free -m的输出:
total used free shared buffers cached Mem: 256 226 29 0 0 0 -/+ buffers/cache: 226 29 Swap: 0 0 0
我能做些什么来使apache消耗更less的内存? 我不能以较慢的响应为代价节省内存吗?
取决于您的Drupal版本:Drupal 6核心要求PHP的memory_limit至less为16MB。 Drupal 7核心需要32MB。
根据错误和你的post分配了28MB,请在php.ini文件中确认memory_limit设置正确。 确保重新启动Apache以对php.ini进行任何更改。
另一个要考虑的方面是服务器上运行的其他服务,Apache,MySQL等,这些服务总共需要256MB。
要了解当前的内存使用情况,您可以键入:
free -m
-m标志以MB为单位输出数据。 -b开关显示以字节为单位的内存量; -k开关(默认设置)以千字节显示。
你会得到像这样的输出:
total used free shared buffers cached Mem: 24031 22512 1518 0 1614 8082 -/+ buffers/cache: 12815 11215 Swap: 31999 485 31514
根据可用内存的不同,您可以开始将问题缩小到PHP,或者您已经超出/超出了VPS。
编辑
@Ofri,
Apacheconfiguration没有确切的科学知识。它归结为了解机器的规格,主要是试验和错误。 在正在进行的试验和错误期间监视服务器的性能非常重要,因此您可以看到正面/负面的影响。
我会停止Apache,根据下面的值编辑httpd.conf,看看服务器的行为:
请记住Drupal是一个系统pipe理员,你最终可能会将VPS升级到512MB。
-Brendan