Увеличение предела памяти не помогает при фатальной ошибке: допустимый объем памяти… / modules / views / views.module в строке 416


11

Я перешел с Drupal 7.14 на 7.15 три недели назад, и поэтому я сталкиваюсь с рядом очень сложных (для меня) ошибок ограничения памяти . Эти ошибки возникают всякий раз, когда я пытаюсь очистить кэш в производительности или запустить сценарии обновления.

Моя хостинговая компания увеличила лимит памяти в php.ini до 126 М, 256 М, 512 М и даже 1024 М. Но ошибки все еще возникают. Я перенес свой сайт с общего доступа на VPS, но ошибка все еще возникает. Я не знаю и не знаю, как двигаться дальше.

Вот ошибки:

  • Неустранимая ошибка: допустимый объем памяти 536870912 байт исчерпан (попытался выделить 30 байт) в /home/example/public_html/sites/all/modules/views/views.module в строке 416
  • Неустранимая ошибка: допустимый объем памяти 536870912 байт исчерпан (попытался выделить 108 байт) в /home/example/public_html/includes/menu.inc в строке 2736

  • Неустранимая ошибка: допустимый объем памяти 536870912 байт исчерпан (попытался выделить 71 байт) в /home/example/public_html/sites/all/modules/chain_menu_access/chain_menu_access.module в строке 59

  • выделить 64 байта) в /home/example/public_html/sites/all/modules/views/includes/base.inc строке 93


Каков ваш пиковый трафик (страниц / секунду). Кроме того, сколько данных (узлов?) Пытается получить представление назад?
Черувим

аналогичное обсуждение на drupal.org drupal.org/node/76156
Джозеф

2
У вас случайно есть представление, которое возвращает большое количество результатов и для форматирования загружает контент вместо полей? Я видел это препятствие производительности много раз прежде.
Jepedo

Привет, друзья! Большое спасибо за ваши ответы. Я хочу сказать, что веб-сайт находится в режиме обслуживания и содержит только небольшое количество контента (узлов) для целей тестирования. Сайт посещают только сканеры. Как я уже упоминал в своем посте, увеличение лимита памяти в решении php.ini, предложенном на узле drupal.org/node/76156, в моем случае не помогло. Для просмотров, загружающих контент вместо поля. Я хочу выяснить, как
Salift

1
Вы пытались вернуться к Drupal 7.14? Если обновление до Drupal 7.15 вызвало эту проблему, то почему бы не попробовать вернуться обратно? Я догадываюсь, что в одном из ваших модулей есть бесконечная рекурсия. Каковы ваши модули, связанные с Views?
Джонатан Элмор

Ответы:


13

В последнее время я также бьюсь головой о стену из-за проблем с памятью в Drupal. Вот мои собранные знания по теме:

1. Представления (могут) использовать много памяти

Мне нравятся некоторые виды (и панели, и CTools, и все, что merlinofchaos касается своими могучими, могучими пальцами), но возможно создать конфигурации с несколькими взаимосвязями, которые используют много памяти. Если вы отключите ваши представления и проблема с памятью исчезнет, ​​скорее всего, это неправильно сконструированное представление, вызывающее проблему.

Что делать, если это View, и вам действительно нужен этот View для работы? Попробуйте для начала поместить его в код (с помощью Bulk Exporter или Features; см. Ниже. У меня есть функциональность, подобная представлениям вручную, чтобы повысить производительность при очень небольшом успехе). Другая мысль состоит в том, чтобы переделать представление другим способом - если в конечном итоге вы получаете термины таксономии, убедитесь, что тип представления является представлением таксономии при его создании; не создавайте представление контента, которое использует отношения, чтобы получить термины таксономии.

Также стоит упомянуть, что Panels также предположительно использует много памяти - я не проверял это, поэтому не могу подтвердить это.

2. Перенос содержимого из базы данных в код - очень хорошая практика

Мне потребовалось несколько сайтов на Drupal, чтобы понять это, но хранить все, что было создано с помощью пользовательского интерфейса в базе данных (особенно конфигурации Views и Panels), является худшей практикой на Drupal. Почему? Это увеличивает нагрузку на базу данных и не может контролироваться версиями. Первый пункт особенно проблематичен с точки зрения использования памяти - вместо простой загрузки содержимого из представления из базы данных сайт также должен загружать сами компоненты представления. Это усугубляется тем, как Drupal использует таблицы: абстрагируя все до n-й степени, каждый бит функциональности Drupal использует новую таблицу, в результате чего некоторые запросы объединяются в таблицы bajillion. Это вызывает у гинекологов грыжи (предостережение: ссылка глупа), но этого нельзя избежать с помощью такого программного модуля, который был бы модульным и удобным для пользователя, как Drupal.

Решение? Используйте Bulk Exporter (входит в комплект CTools) или функции, чтобы упаковать биты кода, в настоящее время находящиеся в базе данных, в виде кода модуля.

3. Темы могут также съесть память

Много ли в вашей теме файлов шаблонов (т. Е. Файлов в themename / templates /)? Если это так, память используется каждый раз, когда один из этих файлов загружается. Если вы создаете шаблоны специально для подавления отображения битов Drupal, попробуйте либо:

  1. Изменение разрешений, чтобы бит не отображался для определенных ролей пользователя без прав администратора.
  2. Использование CSS для скрытия элементов.

Очевидно, что первый выбор - это то, что вы хотите сделать для вещей, влияющих на безопасность - вы не хотите использовать CSS, чтобы скрыть кнопку «редактировать» для определенных пользователей, только чтобы они затем отображались с помощью Firebug или чего-либо еще.

4. Не отказывайтесь от дополнительных модулей

Хотя иногда сайту нужно много модулей для вклада, не переусердствуйте. Каждый включенный (примечание: включен. Отключенные модули не используют память) модуль использует память. Это немного очевидно, но стоит отметить в любом случае.

5. VPS (иногда) ложь

По моему опыту, некоторые недобросовестные хостинговые компании любят пытаться перенести сайты Drupal на VPS-серверы - они дороже и освобождают пространство общего хостинга для еще большего количества сайтов WordPress. Ситуация усугубляется тем фактом, что веб-хосты часто не рекламируют (или даже не охотно сообщают вам, если их спросят), какой верхний предел памяти используется для виртуального хостинга.

Увы, часто, если сайт не перегружен и все еще падает, проблема, скорее всего, связана с конфигурацией Drupal, чем с чем-либо еще. Выталкивание пользователя в VPS просто мутит воду и добавляет больше переменных для работы (это конфигурация веб-сервера? Конфигурация PHP? Гостевая конфигурация VPS? Даже конфигурация хоста VPS?).

6. Когда все остальное терпит неудачу, клонируйте к localhost и бейте его палкой

Это главная причина, по которой люди используют методологию dev-staging-production с контролем версий - когда все остальное терпит неудачу, вы можете сделать дамп БД, выполнить клонирование сайта на локальный тестовый сервер и затем по-королевски испортить сайт на сервере. тестирование сервера, не беспокоясь о том, чтобы что-то сломать на рабочем сервере

Что касается проблем с памятью, это обычно означает отключение модулей один за другим, пока не будет выявлен тот, который вызывает проблему. Это также может указывать на проблемы, связанные с веб-хостингом - если сайт отлично работает при локальной установке с объемом памяти, установленным на что-то разумное, например 128 МБ, то вы знаете, что ваш веб-хост работает без ошибок.

ТЛ; др

Моя интуиция в том, что проблема заключается в chain_menu_access. Попробуйте отключить это и очистить кеш, посмотрите, работает ли он.

Я также добавлю к этому ответу, как я думаю о других вещах, чтобы попробовать ...


... и это именно то, на что я надеялся, когда я вознаграждаю за этот вопрос! Особенно 2. 110 повторений для вас, сэр :) Надеюсь, это привлечет некоторые полезные комментарии от других людей с немного отличным опытом
user56reinstatemonica8

ps Я слышал в разных местах, что даже отключенные модули используют определенный объем памяти при разборе файлов. Я видел, как люди говорят, что все файлы php / inc анализируются каким-то образом, хотя это кажется неправильным (скорее всего, просто файлы информации). Есть идеи, есть ли правда в этом?
user56reinstatemonica8

Хорошо, спасибо! Я почти уверен, что Drupal достаточно добросовестен при загрузке файлов - если вы запускаете XHProf, количество вызовов, чтобы file_scan_directoryиспользовать достаточно памяти, как есть. Я проверю кое-что с devel this после, чтобы подтвердить это, хотя.
конце

Если отключенные модули используют какую-либо память, это довольно несущественно. Я посмотрел на то, сколько памяти было сообщено Devel до и после удаления модуля - хотя при обновлении страницы после удаления файлов наблюдался небольшой (<1 МБ) всплеск, затем при следующем обновлении она возвращалась к точным значениям перед удалением. Это приводит меня к мысли, что Drupal a. Сканирует каталог модулей при загрузке, чтобы увидеть, есть ли новые файлы .info. B. Добавляет детали модуля в свою systemтаблицу c. Загружает любые модули с записями поля system.status, установленными в 1. Если кто-то может подтвердить или опровергнуть это, я был бы признателен.
Эндрю

2

Вы можете попробовать установить PHP профилировщик, например, XHProf или встроенный профилировщик Xdebug, чтобы проверить, что происходит в запросе.


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

1

Взгляды - это боров памяти. Кеширование Drupal может помочь. Однако Drupal загружает только активные модули, если они создают таблицы или имеют другие объекты, которые могут зависать. Только удаление удалит большинство артефактов. Мы используем авторизацию / разрешения drupal и пишем свои собственные модули внутри. Не самая лучшая, но производительность гораздо лучше и проще в настройке. Мы делаем то же самое для WP тоже.


0

В моем случае проблема ограничения памяти была сгенерирована кеш-системой (модули Boost и Boost Expire). Это дает мне проблему для обновления модуля или просмотров. После отключения модулей Boost все работает нормально.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.