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.

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.


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)


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.