Рейтинг:3

Проблема с памятью скрипта Drush

флаг us

Я запускаю длинный скрипт drush и это вызывает проблемы с памятью.

Затем я попытался отладить его, и у меня есть очень простой код:

$query = \Drupal::entityTypeManager()->getStorage('user');

foreach ($ электронная почта как $ i => $ электронная почта) {
    $users = $query->loadByProperties(['mail' => $email]);
    $ пользователь = сброс ($ пользователей);

    сбросить ($ пользователь);
    сбросить ($ пользователей);
}

Когда я запустил скрипт, я заметил, что память резко увеличивается по мере работы скрипта. Что вызывает эту проблему с памятью?

leymannx avatar
флаг ne
Проверьте код https://www.drupal.org/project/drush9_batch_processing.
leymannx avatar
флаг ne
https://git.drupalcode.org/project/drush9_batch_processing
флаг us
@leymannx Это мне не помогает, у меня уже есть скрипт drush, мне не нужен модуль, мне просто интересно, почему он использует много памяти.
leymannx avatar
флаг ne
Это пример модуля, который объясняет, как реализовать пакетный процесс в команде Drush. Пакетный процесс — это то, что вам нужно для обработки пользователей небольшими порциями, а между этими порциями снова освобождается память.
Рейтинг:5
флаг cn

Проблема с памятью вызвана внутренним кешем объектов, который вы можете освободить, используя $хранилище->resetCache().

Вы назвали пользовательское хранилище $query, поэтому замените команды unset() на:

$query->resetCache([$user->id()]);
$query->resetCache(array_keys($users));

Недавно ядро ​​добавило совет вместо этого использовать сервис entity.memory_cache, чтобы очищать только кеш в памяти и не делать недействительными сущности в базе данных:

\Drupal::service('entity.memory_cache')->deleteAll();

Это более эффективно в вашем скрипте, а также для последующих загрузок сущностей.

Справка: https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Entity%21ContentEntityStorageBase.php/function/ContentEntityStorageBase%3A%3AresetCache/9.2.x

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

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