我试图运行一个共享的主机服务器上的Drupal安装。 (我只是订阅供应商 - 我没有自己的箱子。)
我需要增加PHP内存限制我的Apache服务器。 我试过了
ini_set('memory_limit', '64M');
在settings.php配置(包含在每个请求的文件),但是这会导致内部服务器错误500。如果我把它拿出来,我得到这个错误:
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 19456 bytes)...
侧问题:19456小于33554432.为什么说允许的大小被耗尽?
我也试图把这个在上的.htaccess:
php_value memory_limit 128M
这是没有效果的。
您收到此错误信息:
的用尽33554432个字节允许存储器大小(试图分配19456个字节)
表示你要试图分配比你被允许使用33554432个字节以上; 即32 MB:
; 33554432/1024/1024
32
这表明发生故障的分配是,当PHP tryied分配19千字节; 但已经几乎32MB分配 -这些分配并没有失败,因为他们总小于32 MB。
该错误消息的“19456个字节”的部分是不是有什么真正相关:什么是相关的是,你的memory_limit
设置为32 MB。
考虑到memory_limit
是某种安全的,这将是奇怪的是,你的托管服务提供商可以让你改变它的价值...
如果你是在共享主机,这将意味着,在服务器上的任何人都可以得到他们想要的任何内存量......这不会是很好的同一服务器上的其他用户!
BTW:32MB实际上是一个相当合理的价值-我从来没有见过配置为允许超过32 MB的web应用程序的服务器......和默认值PHP 5.2似乎是16 MB,根据手册 。
(我一直在使用Drupal了几个月)
有关错误500,我没有很多的想法......一种可能性是,该safe_mode
被激活,它不会允许在执行时设置memory_limit的。
该手册没有看到说太多有关,但有一点下信息max_execution_time
指令:
您不能更改此设置ini_set()
在安全模式下运行时。 唯一的解决方法是关闭安全模式或者在php.ini改变时间限制。
我想,同样是关于真实memory_limit
; 这似乎是合乎逻辑的,反正。
把你的php.ini文件。 问问你的主机重新启动Apache。 这对drupal.org节点引导您如何做到这一点。 如果您有共同主办,有一步一步的关于如何在drupal.org改变你的php.ini大多数比较流行的供应商指南。 只要搜索“PROVIDER_NAME增加内存限制。”
你需要与你的托管公司,以验证他们有多少内存允许你因为只有他们就可以改变它,如果他们不增加它,那么我建议寻找新的宿主公司。
然而,当涉及到Drupal的,你是正确的添加
ini_set('memory_limit', 'xxxM');
到settings.php这个文件。 (XXX =所需要的存储器)
Drupal有很多失败的保险柜,这是其中一个和Drupal阻止你耗尽你的记忆。
因此,与您的托管公司检查,把它上升,并在settings.php配置文件中设置你的memory_limit的。
我通常只是添加此线在脚本的最底部,但是你真的可以添加任何地方。
阅读本该也有类似的问题,有许多方法在Drupal来解决这个其他人。
http://drupal.org/node/29268
祝好运
问问你的供应商,为什么它不工作。 我猜他们有限的内存量,您可以使用,并且不允许它被设置任何更高,或者你是根本没有你的内存要求总量的虚拟主机中运行(这可能是事故的原因错误500)。
许多共享主机提供商不会让你提高PHP的内存限制,因为他们不希望在一个共享盒从同一台机器上的其他网站占用内存的一个网站。 我建议你阅读你的托管服务提供商的常见问题和有关诸如此类的PHP,它可以列出任何这样的限制存在。
侧问题:19456小于33554432.为什么说允许的大小被耗尽?
较小的号码是造成分配的总金额超过限额的请求,只是大小 - 不是所有分配请求的实际总。 所以,如果3354万个字节已经分配,并要求大小19456的另一个目的,那么你会得到该消息。
如果您正在设置memory_limit
和失控小于最大的内存错误,罪魁祸首之一在于上游产卵系统的过程:Apache的。
在Apache的配置( /usr/local/apache/conf/httpd.conf
),你会发现一个指令,设定一个上限为处理请求(和Drupal在这样的进程中运行),所有子进程。 一个给定的Apache服务器可以处理多个客户(你和其他一些人)。 如果他们允许一个客户霸占所有的记忆,每个人都将是具有BadTime(TM)。 为了避免这种情况,他们会盖每一个这样的过程可以有多少内存。
例如:
# rlimits, do not modify
# Setting single-process size
#RLimitMEM 85643200 104857600
RLimitMEM 134217728 537395200
在这里,我已经注释掉我的托管服务设定的初始值和增加他们。
当然,如果你是一个共享的服务器上,那么它是极不可能的,你可以更改此配置。 其实,这很可能是你的主机提供商将更改配置。
FWIW,主机的Gator似乎给你〜每个进程80MB。 PHP运行时似乎取〜16MB。