Puncte:3

Problemă cu memoria scriptului Drush

drapel us

Rulez un script drush lung și provoacă probleme de memorie.

Apoi am încercat să-l depanez și am acest cod foarte simplu:

$interogare = \Drupal::entityTypeManager()->getStorage('utilizator');

foreach ($emails ca $i => $email) {
    $users = $query->loadByProperties(['mail' => $email]);
    $utilizator = reset($utilizatori);

    unset($utilizator);
    unset($utilizatori);
}

Când am rulat scriptul, am observat că memoria crește dramatic pe măsură ce scriptul rulează. Ce cauzează această problemă de memorie?

leymannx avatar
drapel ne
Verificați codul https://www.drupal.org/project/drush9_batch_processing
leymannx avatar
drapel ne
https://git.drupalcode.org/project/drush9_batch_processing
drapel us
@leymannx Acest lucru nu mă ajută, am deja un script drush, nu am nevoie de un modul, mă întreb doar de ce folosea multă memorie.
leymannx avatar
drapel ne
Este un exemplu de modul care explică cum să implementați un proces batch într-o comandă Drush. Un proces batch este ceea ce aveți nevoie pentru a procesa utilizatorii în bucăți mici și între aceste bucăți eliberați din nou memoria.
Puncte:5
drapel cn

Problema memoriei este cauzată de memoria cache a entității interne pe care o puteți elibera utilizând $storage->resetCache().

Ați denumit stocarea utilizatorului $interogare, așa că înlocuiți comenzile unset() cu:

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

Recent, core a adăugat sfatul de a utiliza serviciul entity.memory_cache, pentru a șterge doar memoria cache din memorie și nu a invalida entitățile din baza de date:

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

Acest lucru este mai eficient, în scriptul dvs. și, de asemenea, pentru încărcările ulterioare ale entităților.

Referinţă: https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Entity%21ContentEntityStorageBase.php/function/ContentEntityStorageBase%3A%3AresetCache/9.2.x

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.