mysql pára de responder periodicamente

1

Eu rodei um site (Magento) em um servidor Ubuntu 14.04.3 rodando em um VMWare VPS de 32xCPU.

Quando está sob carga pesada, normalmente recebe de 20 a 25 solicitações / segundo. No magento existe uma consulta UPDATE específica para uma tabela mysql que normalmente leva ~ 1 ms (± 0.2 ms) e roda ~ 200-300 vezes por minuto (3-5 consultas / segundo). No entanto, durante essas cargas pesadas em intervalos de 1 a 2 horas, essa consulta específica demora de 5 a 35 segundos para ser concluída, o que também paralisa todo o site (mesmo as solicitações sem essa consulta).

Eu tenho monitorado a utilização de memória RAM e CPU e a carga normalmente gira em torno de 22-28, tanto antes do congelamento quanto durante o processo. O congelamento parece ser quase permanente. Pode durar pelo menos 40 minutos e reiniciar o mysql e o php-fpm não o faz desaparecer. O uso da RAM nunca ultrapassa 10% da RAM disponível e a troca nunca é usada.

A única maneira de resolvê-lo é reinicializando o VPS, o que me faz acreditar que existe uma configuração incorreta do sistema responsável pelo congelamento.

Uma observação interessante: algumas vezes, o problema foi resolvido sem reinicialização. O que esses casos têm em comum é que essa consulta "apenas" demora de 2 a 7 segundos para ser concluída. Nestes momentos, o problema desaparece em 10-15 minutos vezes.

Então, alguma sugestão sobre o que causa isso e como posso rastrear o verdadeiro problema subjacente?

Atualização 1: O carregamento do sistema (carga de 1 minuto para 32 núcleos de CPU) normalmente atinge o pico em 27-28, mas pode atingir até 40 sob carga extrema. Quando esse congelamento ocorre, a carga normalmente é de 22 a 27 antes e durante o congelamento. A maioria, se não todos os núcleos de CPU disponíveis (32), tem algum tempo ocioso durante o congelamento.

Atualização 2: Eu fiz essas alterações para my.cnf:

innodb_buffer_pool_size = 10G (Innodb data is 5.5G)
key_buffer          = 16M
max_allowed_packet  = 16M
thread_stack        = 192K
thread_cache_size   = 8
max_connections     = 1024
    
por Aron Cederholm 03.11.2015 / 15:48

3 respostas

3

Você monitorou a E / S de disco? Há um aumento nos tempos de espera de E / S ou transações enfileiradas? É possível que as solicitações estejam enfileiradas no nível de armazenamento devido a uma limitação de E / S do seu host. Além disso, você verificou se está atingindo seus clientes máximos permitidos do mysql? Se, de repente, essas consultas demoram muito mais para serem concluídas, também é possível que não estejam deixando conexões disponíveis suficientes para o tráfego normal do site, porque as outras conexões não estão fechando rápido o suficiente.

    
por 09.11.2015 / 16:58
1

Se você estiver usando um VPS, presumivelmente não poderá ver o que está acontecendo em outros hosts no mesmo hardware físico.

Pode ser que o IO seja muito carregado, possivelmente por você, esteja levando a algo em um backup de VPS totalmente separado, o que leva tempo para ser resolvido. Pode ser por isso que reiniciar o php e o mysql no seu sistema não é suficiente para colocar as coisas de volta nos trilhos. É interessante, no entanto, que reiniciar seu VPS parece resolver o problema? Alguma chance de que seja apenas uma função de algum tempo?

Se você desligar o php e o mysql, você pensaria que não haveria muitos recursos consumidores em seu sistema (estou fazendo muitas suposições lá, mas você deve saber mais). Verifique isso embora.

Veja quais atividades ainda estão em andamento. O topo é uma boa ferramenta, pois inclui a análise da atividade de IO por processo, com permissões suficientes para isso. O iostat é útil para observar a atividade total do disco de cada dispositivo.

Se você não tem muita atividade de disco em seu VPS, mas o desempenho é ruim, é provável que esteja em outro VPS ou talvez até no host. Você precisa conversar com seu provedor de hospedagem sobre isso, mas esteja ciente de que, se estiver causando o problema, você espera que eles se preocupem com isso.

    
por 10.11.2015 / 13:07
0

Poderia ser uma limitação do sistema se o VPS estivesse sob carga pesada, você poderia fornecer informações sobre a carga do VPS quando isso ocorrer, assim como os logs do sistema?

    
por 03.11.2015 / 16:52