Qual é o objetivo da criação da página lockedLoadData / uncached leva cerca de um minuto, gasto em uso

11

Eu acho que desde a atualização para o Magento 2.3.1 eu tenho problemas com o carregamento de páginas não armazenadas em cache (durante o desenvolvimento).

Eu fiz um rastreamento blackfire.io e verifica-se que 42 segundos são gastos em uso aqui .

Agora estou me perguntando qual é o objetivo disso. Acho que estou correndo em algum tipo de condição de corrida?

Alguém experimentou algo assim antes?

EDIT: A pilha de chamadas parece envolver o tradebug.

Alex
fonte

Respostas:

8

Bem, isso é uma escolha? - os engenheiros do Magento fizeram.

Isso não é uma resposta, mas parece que essa função aceita um retorno de chamada destinado a carregar dados em cache. O retorno de chamada verifica se existe atualmente um bloqueio. Caso contrário, ele coloca um bloqueio no lugar, carrega os dados e libera o bloqueio. Se houver um bloco no local, ele dorme por 100,000microssegundos (0,1 segundos) e depois chama o carregador novamente.

Então, pensando alto, meu palpite seria

  1. Talvez um número mais do que o normal de solicitações para esta função
  2. Tempos de leitura mais altos que o normal do seu cache.
Alan Storm
fonte
7

O mecanismo lockedLoadData precisa diminuir a carga no servidor.

Anteriormente, quando o cache de configuração era limpo em sites carregados com oi, todos os clientes geravam as mesmas informações que aumentam significativamente a carga da CPU / io.

Com lockedLoadData, apenas um cliente gera cache e outros esperam por ele.

Mais detalhes sobre como ele funciona.

A primeira chamada de função "obtém dados" e, se obtém os dados, apenas os retorna (portanto, se houver dados no cache, o código funcionará como o anterior e não usará bloqueios).

Se os dados não estiverem disponíveis e o bloqueio estiver bloqueado, tentamos carregar os dados até que os dados cheguem ou o bloqueio seja removido.

Se não houver bloqueio, criamos um bloqueio e geramos dados, salve-o no cache e removemos o bloqueio e retornamos os dados

PS: Enviamos essas alterações como um patch para um dos clientes com carga de até 20kRPM e funciona por pelo menos três meses, sem nenhum problema. Talvez o problema na sua customização / módulos (por exemplo, se eles quebraram o mecanismo de cache)

KAndy
fonte
Interessante ... De qualquer forma, no meu caso, fica louco. Estou a depuração isso com Alan, PulseStorm
Alex
parece ser uma solução muito pobre, significa todos os usuários esperando manterá seu processo vivo .. por que eles não podem simplesmente usar bloqueios de tabela
Ozzie
@OZZIE, você prefere que todo usuário gere dados, em vez de dormir até que um esteja pronto? Não temos assim recursos de CPU livres de matemática
Kandy