Как избежать ошибки «недостаточно памяти»?

7

В настоящее время я работаю с Drupal 7, и у меня установлены следующие модули, все обновлены до соответствующей последней версии:

  • Просмотров - 7.x-3.0-beta3
  • CTools - 7.x-1.0-alpha4
  • Панели - 7.х-3.0-альфа3
  • Правила, ACL, Расширенный форум, Доступ к форуму, Пользовательские очки, BUEditor

Я продолжаю получать «PHP Fatal Error: Недостаточно памяти». Предел моего сервера максимально разрешен моим провайдером (32 МБ). Эти ошибки появляются в основном при взаимодействии со страницей модулей, но они также появляются для любого пользователя, который пытается обновить свой пароль или редактировать узлы.

Таким образом, вы бы посоветовали, как уменьшить использование памяти?

PS: я заметил, что большинство из этих ошибок включают в себя плагины .inc. Но это также касается файлов .inc из основных модулей и системы ... Я мог бы скопировать туда несколько файлов, если хотите.

nyoz
источник

Ответы:

6

В этом случае вы действительно мало что можете сделать. Drupal 7 требует достаточного объема памяти, как и представления, панели и т. Д.

Если обновление до хостинг-плана, где у вас есть по крайней мере 128 МБ, не вариант, я бы по крайней мере удостоверился, что следующие модули отключены:

  • Диспетчер обновлений
  • Ведение журнала базы данных
  • Полевой интерфейс
  • Интерфейс просмотров
  • Редактор панелей на месте
  • Любой другой модуль "UI"

Делайте ваши разработки локально и используйте контроль версий и функции, чтобы обновить вашу производственную коробку.

Алекс Вебер
источник
2
Обратите внимание, что пользовательский интерфейс Views необходим только при редактировании существующего представления или добавлении нового представления; для обычного использования Views UI не требуется, и Views будет работать нормально, даже если этот модуль отключен.
kiamlaluno
1
Точно то же самое относится и к любому из других модулей «UI». Они нужны только для развития. Поля будут работать без пользовательского интерфейса, как и Контекст, и т. Д.
Алекс Вебер
4
Однако представления (а не пользовательский интерфейс) в настоящее время занимают огромное место. Недавно я пытался бороться с объемом памяти Drupal и заметил, что представления загружают кэш схемы и свой собственный кэш данных на каждой странице, где отображается представление. Это может легко означать несколько мегабайт на сайте с несколькими установленными модулями (около 4 МБ в моей тестовой установке).
Бердир
Я должен не согласиться с вашей рекомендацией использовать функции - этот модуль является огромным бременем памяти. Было бы гораздо лучше использовать ловушки обновлений для развертывания изменений конфигурации.
Феликс Ева
Как ни странно, после настройки существующего сайта D7 на виртуальном хостинге и решения многих проблем с памятью с использованием представлений я обнаружил, что изменение версии PHP с 7 на 5.6 очень помогло. Не уверен в причине, но я дошел до того, что разрешил 1024M памяти, и она по-прежнему заканчивалась при отображении 16 элементов в представлении.
jammypeach
4

Как указано в Системных требованиях Drupal, самому Drupal Core для работы требуется 32M. Добавление любых добавленных модулей без увеличения памяти - верный способ избежать этой ошибки.

Если максимальный размер вашего сервера составляет всего 32 МБ, самое время получить новый хостинг.

tim.plunkett
источник
Плохо то, что я просто изменил это ... Я думаю, что застрял с этим по крайней мере один год ... Должен проверить это. :(
nyoz
Кстати, мой хостер 1 & 1 Франция. Я читал на некоторых форумах поддержки WordPress, что они недавно повысили ограничение php до 90Mb. Я позвоню им в понедельник ...! ;)
nyoz
2

Как уже упоминалось, суть в том, что вам реально нужно 128M. Еще один момент, который стоит отметить: если у вас работает пакет изображений, это часто напоминает нам (по крайней мере, в Drupal 6), что в определенных обстоятельствах требуется как минимум 96M.

32М просто не собирается его резать.

NikLP
источник
0

Я думаю, что использование модуля Views - ваша самая большая проблема.

Перепишите все страницы, которые используют представления с пользовательскими запросами, удалите модуль представлений и, пока мы о нем, также удалите правила (опять же, переместите всю логику в код), и использование вашей памяти упадет прямо вниз.

Также просто написание файлов шаблонов и использование обработчиков препроцессора избавит от необходимости сохранения панелей еще больше памяти.

Это непростые или быстрые шаги, требующие глубоких знаний Drupal, MySql и PHP, однако, если производительность является приоритетом номер один, это лучшее решение (и оно будет работать на 32M памяти).

Феликс Ева
источник