Какова цель создания LockLoadData / uncached страницы занимает около минуты, проведенной в usleep

11

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

Я сделал трассировку blackfire.io, и оказалось, что здесь 42 секунды тратятся на сон .

Теперь мне интересно, какова цель этого. Я думаю, что я бегу в каком-то состоянии гонки?

Кто-нибудь испытывал что-то подобное раньше?

РЕДАКТИРОВАТЬ: стек вызовов, кажется, включает коммерции.

Alex
источник

Ответы:

8

Ну, это - выбор? - сделали инженеры Magento.

Это не ответ, но похоже, что эта функция принимает обратный вызов, предназначенный для загрузки кэшированных данных. Обратный вызов проверяет, есть ли в данный момент блокировка на месте. Если нет, он устанавливает блокировку, загружает данные и снимает блокировку. Если блок на месте, он спит в течение 100,000микросекунд (0,1 секунды), а затем снова вызывает загрузчик.

Итак, думая вслух, я думаю,

  1. Может быть, больше, чем обычно, количество запросов к этой функции
  2. Выше обычного времени чтения из вашего кэша.
Алан Сторм
источник
7

Механизм lockedLoadData должен снизить нагрузку на сервер.

Ранее, когда кэш конфигурации очищался на высоконагруженных сайтах, все клиенты генерировали ту же информацию, что значительно увеличивает загрузку процессора / io.

С lockedLoadData только один клиент будет генерировать кеш, а другие будут его ждать.

Подробнее о том, как это работает.

Первый вызов функции «get data» обратный вызов и если он получает данные, то просто возвращает их (поэтому, если данные в кеше, код работает как предыдущий и не использует никаких блокировок).

Если данные недоступны и блокировка заблокирована, то в цикле мы пытаемся загружать данные до тех пор, пока данные не будут получены или не будет снята блокировка.

Если блокировки нет, мы создаем блокировку и генерируем данные, сохраняем ее в кеше, снимаем блокировку и возвращаем данные

PS: Мы отправили эти изменения как патч для одного из клиентов с нагрузкой до 20kRPM, и он работает как минимум 3 месяца без проблем. Так что, возможно, проблема в ваших настройках / модулях (например, если они сломали механизм кэширования)

Канди
источник
Интересно ... Во всяком случае в моем случае это сводит с ума. Я отлаживаю это с Аланом, PulseStorm
Алекс
кажется действительно плохим решением, означает, что все пользователи, ожидающие, сохранят свой процесс ... почему они не могут просто использовать блокировки таблиц
OZZIE
@ OZZIE Вы предпочитаете, чтобы все пользователи генерировали данные, а не спали, пока один не закончил? У нас нет столь математически свободных ресурсов процессора
KAndy