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.