4

我正在尝试在共享托管服务器上运行 Drupal 安装。(我只是订阅了一个提供商——我不拥有这个盒子。)

我需要增加我的 Apache 服务器的 PHP 内存限制。我努力了

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 

这没有效果。

4

6 回答 6

10

您收到的错误消息:

允许的内存大小 33554432 字节用尽(尝试分配 19456 字节)

表示您正在尝试分配超过您允许使用的 33554432 个字节;即 32 MB:

; 33554432/1024/1024
        32

它表明分配失败是在 PHP 尝试分配 19 Kbytes 时;但是已经分配了将近 32MB ——这些分配没有失败,因为它们的总数不到 32MB。

错误消息的“19456 字节”部分并不是真正相关的:相关的是您memory_limit的设置为 32 MB。


考虑到这memory_limit是某种安全性,您的托管服务提供商允许您更改其值会很奇怪......

如果您在共享主机上,这意味着服务器上的任何人都可以获得他们想要的任意数量的内存......这对于同一台服务器上的其他用户来说并不是那么好!

顺便说一句:32MB 实际上是一个相当合理的值——我从来没有见过一个服务器配置为允许超过 32MB 用于 Web 应用程序......根据手册,PHP 5.2 的默认值似乎是 16MB 。
(我已经与 Drupal 合作了几个月)


关于错误 500,我没有太多想法……一种可能是safe_mode已激活,并且它不允许在执行时设置 memory_limit。

该手册对此没有多说,但max_execution_time指令下有一些信息:

ini_set()在安全模式下运行时,您无法更改此设置 。唯一的解决方法是关闭安全模式或更改 php.ini 中的时间限制。

我想这同样适用于memory_limit; 无论如何,这似乎是合乎逻辑的。

于 2009-09-06T22:22:19.543 回答
1

您需要与您的托管公司确认他们允许您使用多少内存,因为只有他们才能更改它,如果他们不会增加它,那么我建议寻找一个新的托管公司。

但是,当涉及到drupal时,您添加的是正确的

ini_set('memory_limit', 'xxxM');

到 settings.php 文件。(xxx = 所需内存)

Drupal 有很多故障保险,这是其中之一,drupal 可以防止您耗尽内存。

因此,请与您的托管公司核实,增加它并在 settings.php 文件中设置您的 memory_limit。

我通常只是在脚本的最底部添加这一行,但你可以在任何地方添加它。

为其他有类似问题并在 drupal 中有多种解决此问题的方法的人阅读此内容。

http://drupal.org/node/29268

祝你好运

于 2011-12-21T14:46:09.683 回答
1

把它放在你的 php.ini 文件中。要求您的主机重新启动 Apache。drupal.org 上的这个节点将引导您完成操作。如果您有共享主机,则在 drupal.org 上为大多数更受欢迎的提供商提供了有关如何更改 php.ini 的分步指南。只需搜索“PROVIDER_NAME 增加内存限制”即可。

于 2009-09-11T00:03:48.930 回答
1

如果您设置memory_limit并获得的内存错误小于最大值,则罪魁祸首在于产生您的进程的上游系统:Apache。

在 Apache 配置/usr/local/apache/conf/httpd.conf(给定的 Apache 服务器可能会处理多个客户(您和其他一些客户)。如果他们允许一位客户占用所有内存,那么其他所有人都会遇到 BadTime(tm)。为了避免这种情况,他们将限制每个此类进程可以拥有的内存量。

例如:

# rlimits, do not modify
#  Setting single-process size 
#RLimitMEM 85643200 104857600
RLimitMEM 134217728 537395200

在这里,我已经注释掉了我的托管服务设置的原始值并增加了它们。

当然,如果您在共享服务器上,那么您不太可能更改此配置。事实上,这很可能是您的主机提供商会更改的配置。

FWIW,Host Gator 似乎每个进程给你〜80Mb。PHP 运行时似乎需要 ~16Mb。

于 2013-01-29T01:12:01.087 回答
0

询问您的提供商为什么它不起作用。我猜他们限制了您可以使用的内存量并且不允许将其设置得更高,或者您在一个根本没有您请求的内存量的虚拟主机中运行(这可能是导致错误 500)。

于 2009-09-06T22:06:50.740 回答
0

许多共享主机提供商不允许您提高 PHP 的内存限制,因为他们不希望共享框中的一个站点占用同一台机器上其他站点的内存。我建议阅读您的托管服务提供商的常见问题解答以及关于 PHP 的其他内容,它可能会在那里列出任何此类限制。

附带问题:19456 小于 33554432。为什么说允许的大小已用尽?

较小的数字只是导致总分配量超过限制的请求的大小 - 而不是所有分配请求的实际总数。因此,如果已经分配了 33540000 个字节,并且请求了另一个大小为 19456 的对象,那么您将收到该消息。

于 2009-09-06T22:20:49.127 回答