Увеличьте ограничение памяти PHP (Apache, Drupal6)

Я пытаюсь запустить установку 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 МБ:

 ; 33554432/1024/1024 32 

Это указывает на то, что неудавшееся распределение произошло, когда PHP попытался выделить 19 Кбайт; но уже было выделено почти 32 МБ – эти распределения не потерпели неудачу, так как их общая сумма составляла менее 32 МБ.

Часть сообщения об ошибке «19456 байт» не соответствует действительности: важно, чтобы ваш memory_limit был установлен на уровне 32 МБ.

Учитывая, что memory_limit – это своего рода безопасность, было бы странно, что ваш хостинг-провайдер позволяет вам изменить его значение …

Если вы находитесь на общедоступном хостинге, это будет означать, что любой, кто на сервере может получить любую требуемую память … Что бы это было не так приятно для других пользователей на одном сервере!

BTW: 32 МБ на самом деле довольно разумное значение – я никогда не видел сервер, настроенный на разрешение более 32 МБ для веб-приложения … И значение по умолчанию для PHP 5.2, по-видимому, составляет 16 МБ, согласно руководству .
(И я работаю с Drupal в течение нескольких месяцев)

Об ошибке 500, у меня нет много идей … Одна из возможностей может заключаться в том, что safe_mode активирован и что он не позволяет устанавливать memory_limit во время выполнения.

В руководстве не говорится об этом, но в директиве max_execution_time имеется немного информации:

Вы не можете изменить этот параметр с помощью ini_set() при работе в безопасном режиме. Единственным обходным решением является отключить безопасный режим или изменить временные ограничения в php.ini.

Я полагаю, что это верно и в отношении memory_limit ; все равно логично.

Поместите его в файл php.ini. Попросите вашего хоста перезапустить Apache. Этот узел на drupal.org исследует, как это сделать. Если у вас есть общий хостинг, есть пошаговые руководства о том, как изменить php.ini для большинства наиболее популярных поставщиков на drupal.org. Просто найдите «PROVIDER_NAME», увеличив ограничение памяти.

Вам нужно подтвердить своей хостинговой компанией, сколько памяти они вам позволили, поскольку только они смогут ее изменить, если они не увеличат ее, тогда я предлагаю искать новую принимающую компанию.

Однако, когда дело доходит до drupal, вы были прав, чтобы добавить

 ini_set('memory_limit', 'xxxM'); 

в файл settings.php. (xxx = требуемая память)

У Drupal есть много отказоустойчивых сейфов, это один из них, и drupal останавливает вас от изнурительной памяти.

Поэтому проверьте у вас хостинговую компанию, увеличьте ее и установите memory_limit в файле settings.php.

Обычно я просто добавляю эту строку в самом конце скрипта, но вы действительно можете добавить ее в любом месте.

Прочтите это для других людей, у которых была аналогичная проблема, и у них было множество методов для решения этой проблемы в drupal.

http://drupal.org/node/29268

Удачи

Попросите вашего провайдера, почему он не работает. Я бы предположил, что они ограничили объем памяти, который вы можете использовать, и не позволяйте ему устанавливать более высокий уровень, или вы работаете на виртуальном хосте, который просто не имеет объем запрашиваемой памяти (это может быть причиной ошибка 500).

Многие общедоступные хостинг-провайдеры не позволят вам увеличить ограничение памяти PHP, так как они не хотят, чтобы один сайт на общей коробке забивал память из других сайтов на одном компьютере. Я бы рекомендовал прочесть часто задаваемые вопросы о вашем хостинг-провайдере и о том, что касается PHP, он может указать любое такое ограничение.

Боковой вопрос: 19456 меньше, чем 33554432. Почему он говорит, что разрешенный размер исчерпан?

Меньшее число – это просто размер запроса, который заставлял общую выделенную сумму превышать лимит, а не фактическую сумму во всех запросах на распределение. Итак, если уже было выделено 33540000 байт, и был запрошен другой объект размером 19456, вы получите это сообщение.

Если вы устанавливаете memory_limit и выходите из ошибок памяти меньше максимального, один из виновников заключается в том, что восходящая система запускает ваш процесс: Apache.

В конфигурации Apache ( /usr/local/apache/conf/httpd.conf ) вы найдете директиву, которая устанавливает верхний предел для всех дочерних процессов, обрабатывающих запросы (и Drupal работает в таких процессах). Данный сервер Apache может обрабатывать несколько клиентов (вы и некоторые другие). Если бы они позволили одному клиенту размахивать всю память, у всех остальных был бы BadTime ™. Чтобы избежать этой ситуации, они могут ограничить объем памяти, который может иметь каждый такой процесс.

Например:

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

Здесь я прокомментировал исходные значения, установленные моим сервисом хостинга, и увеличил их.

Конечно, если вы используете общий сервер, то вряд ли вы сможете изменить эту конфигурацию. Фактически, это, скорее всего, будет изменяться ваш хост-провайдер.

FWIW, Host Gator, кажется, дает вам ~ 80Mb за процесс. Время выполнения PHP составляет ~ 16 Мб.