Рейтинг:1

Попытка добраться до сути ошибки нехватки памяти, связанной с базой данных

флаг cn

Я унаследовал очень проблемный сайт, созданный на Drupal 7. После установки сайта в моем пространстве разработки я получаю сообщение об ошибке 500 «Эта страница не работает». Просматривая веб-журналы, я получаю следующее сообщение:

lmu.[sitename].co.uk [Сб, 23 апреля, 15:39:03 2022] [ошибка] [клиент 86.174.32.32:0] AH01215: Неустранимая ошибка PHP: Недостаточно памяти (выделено 56098816) (попытка выделить 459743 байта) в /home/sites/[имя сайта].co.uk/public_html/lmu/includes/database/database.inc в строке 2324: /home/sites/[sitename].co.uk/public_html/lmu/index.php

memory_limit был 128M, а теперь 512M, но я получаю точно такую ​​же ошибку с теми же числами и т. д.

Это связано с чем-то, что содержится в БД?

Дополнительные правки:

Другая, возможно, связанная с этим проблема заключается в том, что на другом сервере сайт работает, но только с PHP 5.6 (как обновленная, так и не обновленная версия сайта). На сервере, к которому относится этот вопрос, также работает 5.6. Однако, когда я пытаюсь использовать 7.4, сайт все еще не работает, но я получаю другое сообщение об ошибке, относящееся к базе данных, которое может дать дополнительные подсказки:

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

PDOException: SQLSTATE [HY000]: общая ошибка: 2014 Невозможно выполнить запросы, в то время как другие небуферизованные запросы активны. Рассмотрите возможность использования PDOStatement::fetchAll(). В качестве альтернативы, если ваш код только когда-либо собирается работать с mysql, вы можете включить буферизацию запросов, установив атрибут PDO::MYSQL_ATTR_USE_BUFFERED_QUERY.: УДАЛИТЬ ИЗ {семафор} ГДЕ (значение = :db_condition_placeholder_0) ; Множество ( [:db_condition_placeholder_0] => 15563655396262a9bd4cef06.08066829 ) в lock_release_all() (строка 269 из /home/sites/[sitename].co.uk/public_html/lmu/includes/lock.inc).

флаг cn
Это в принципе невозможно сказать без профилирования запроса страницы - если выделенный объем байтов был большим, вы, вероятно, могли бы быть достаточно уверены, чтобы указать на то, что виновником является этот скрипт, но это не так, он составляет 0,5 МБ. . Таким образом, либо этот вызов db был изолирован, и просто неудачливый неудачник, который пытался получить немного памяти, когда все остальное исчезло, либо этот вызов db вызывается рекурсивно/исчерпывающе чем-то другим, что препятствует восстановлению памяти. В любом случае вам нужно вернуться к трассировке стека и посмотреть, что происходит.
флаг id
Согласовано. Последний код для выделения памяти не обязательно является виновником. Но это могло быть.
флаг cn
Привет @Clive. Я не уверен, что лучше всего исследовать стек в этом контексте (я пришел из внешнего интерфейса, пожалуйста, простите меня!). Не могли бы вы дать мне несколько советов, если это возможно?
флаг cn
О, я немного пропустил «те же самые цифры» раньше, это на самом деле очень важно, моя беда - вы уверены в этом? Если это так, то 56098816 составляет ровно 56 МБ, что говорит о том, что ваш лимит PHP не такой, как вы думаете... может быть, вы редактируете неправильный файл php.ini или не перезапустили php-fpm/apache после его изменения?
флаг cn
Также убедитесь, что вы проверяете ограничение в правильном контексте — в некоторых средах нет ничего необычного в том, что конфигурация PHP для CLI отличается от веб-интерфейса, поэтому, если вы получаете 128 МБ в командной строке, это не так. обязательно означает, что веб-сервер получает ту же сумму. Самый простой способ проверить это добавить test.php в корень веб-сайта, содержащий `
флаг cn
@Клайв Ура -
флаг cn
Я добавил дополнительную информацию к вопросу.
флаг cn
Возможно, проблема с памятью сервера: https://stackoverflow.com/questions/13955914/php-out-of-memory-error-even-though-memory-limit-not-reached

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.