Điểm:3

Vấn đề về bộ nhớ tập lệnh Drush

lá cờ us

Tôi đang chạy một tập lệnh drush dài và nó gây ra các vấn đề về bộ nhớ.

Sau đó, tôi đã thử gỡ lỗi nó và tôi có mã rất đơn giản này:

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

foreach ($email là $i => $email) {
    $users = $query->loadByProperties(['mail' => $email]);
    $user = đặt lại($users);

    bỏ đặt($user);
    bỏ đặt($users);
}

Khi tôi chạy tập lệnh, tôi nhận thấy rằng bộ nhớ tăng lên đáng kể khi tập lệnh đang chạy. Điều gì gây ra vấn đề bộ nhớ này?

leymannx avatar
lá cờ ne
Kiểm tra mã của https://www.drupal.org/project/drush9_batch_processing
leymannx avatar
lá cờ ne
https://git.drupalcode.org/project/drush9_batch_processing
lá cờ us
@leymannx Điều này không giúp ích gì cho tôi, tôi đã có tập lệnh drush, tôi không cần mô-đun, tôi chỉ thắc mắc tại sao nó lại sử dụng nhiều bộ nhớ.
leymannx avatar
lá cờ ne
Đây là mô-đun ví dụ giải thích cách triển khai quy trình hàng loạt trong lệnh Drush. Một quy trình hàng loạt là những gì bạn cần để xử lý người dùng theo các khối nhỏ và ở giữa các khối này lại giải phóng bộ nhớ.
Điểm:5
lá cờ cn

Sự cố bộ nhớ là do bộ đệm thực thể bên trong gây ra mà bạn có thể giải phóng bằng cách sử dụng $storage->resetCache().

Bạn đã đặt tên cho bộ nhớ người dùng $query, vì vậy hãy thay thế các lệnh unset() bằng:

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

Gần đây, lõi đã thêm lời khuyên sử dụng dịch vụ entity.memory_cache để chỉ xóa bộ đệm trong bộ nhớ và không làm mất hiệu lực các thực thể trong cơ sở dữ liệu:

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

Điều này hiệu quả hơn, trong tập lệnh của bạn và cả cho các lần tải thực thể tiếp theo.

Thẩm quyền giải quyết: https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Entity%21ContentEntityStorageBase.php/function/ContentEntityStorageBase%3A%3AresetCache/9.2.x

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.