Então eu tenho essa máquina rodando um servidor XMPP que se conecta ao seu banco de dados MySQL. Quando eu começo o teste de carga, tudo vai bem até depois de cerca de 500s quando percebo:
Caused by: com.mysql.jdbc.exceptions.MySQLTimeoutException: Statement cancelled due to timeout or client request
começando a aparecer. Como eles fazem, o comando:
mysql> show processlist;
revela como o MySQL está recebendo as próximas consultas, responde a elas (estado = envio de dados foi capturado em fita), então simplesmente fica parado no estado = Dormir por 20s, 40s, ou até mais. Em todo esse tempo, a chamada do método PreparedStatement.execute () não retorna. O comando top
não revela mais de 800% de uso da CPU (16 núcleos - metade deles são usados no pico).
Eu verifiquei / var / log / messages e alguns outros lugares em / var / log para erros na máquina do servidor XMPP sem nenhuma dica dada. Eu também tentei outro conector JDBC, outro servidor MySQL, atualizei o JRE, sem melhorias. Onde devo procurar mais?
O que vem depois? Obrigado!
EDIT: verificado um pouco mais e isso não está relacionado nem ao número de segmentos que bombeiam & empurrando consultas de suas filas, nem para consultas / segundo, nem para uma máquina específica, nem para o tipo de consultas SQL sendo executadas ou o número de conexões com o MySQL. Também inspecionei uma captura tcpdump
e o servidor está respondendo a consultas em alguns milissegundos. O resto do tempo ... É apenas o cliente de alguma forma não buscar esse resultado no espaço do usuário TCP.
Mas em todos os testes há uma métrica que permanece inalterada - quando chega a 30k usuários conectados simultaneamente (usuários de servidores XMPP) - é quando o problema começa.