Por onde devo começar a tentar depurar um pico e tempo limite de CPU ao fazer login em um site Moodle?

Por onde devo começar a tentar depurar um pico e tempo limite de CPU ao fazer login em um site Moodle?

desculpas pela natureza novata desta questão. Sou um desenvolvedor web, embora não tenha muita experiência em manutenção de servidores ou depuração e correção de problemas de desempenho.

Eu tenho um site Moodle (Moodle 2.2.3) rodando em um servidor Apache (pilha LAMP) que usa um banco de dados MySQL.

Recentemente, quando certos usuários tentam fazer login, eles relatam um tempo limite - eles simplesmente veem uma página em branco após um determinado período. Alguns usuários conseguem fazer login sem problemas. Isso parece ser determinado pelos cursos em que o usuário está matriculado. Um usuário administrador sem cursos, por exemplo, pode fazer login sem problemas.

Consegui estender o valor do tempo limite no php.ini de 60 segundos para 120 segundos e ver o mesmo comportamento. Usando $top, posso ver que a CPU usada pelo www-data aumenta em torno de 99% até que o tempo limite seja atingido.

Presumo que haja uma longa chamada para o banco de dados ou algo semelhante.

Como posso ver mensagens de erro registradas pelo mysql? como posso ver mensagens de erro registradas pelo PHP? O error_log padrão (/var/log/php.log) que está definido no meu php.ini não parece estar lá? Como posso fazer com que o PHP registre erros neste arquivo para que eu possa ver o que está acontecendo?

O Moodle também registra erros em logs/error.log, mas isso não esclarece as coisas.

Todas e quaisquer boas sugestões são bem-vindas - obrigado!

Responder1

Fizemos muitas otimizações de desempenho do Moodle onde eu costumava trabalhar e usamos o perfil PHP Xdebug para ajudar muito nisso. Ao ativar o perfil, ele produzirá um arquivo *.cachegrind que poderá ser lido por muitos leitores - eu uso QCacheGrind no Windows ou KCacheGrind no Linux. Você deverá então ser capaz de identificar a função que está demorando.

Da memória, é provavelmente a quantidade de dados do curso que ele está tentando carregar quando o usuário efetua login. Se houver muitos dados e ele estiver capturando todos os dados do servidor SQL em vez de apenas o necessário, isso pode atrasar as coisas baixo um pouco. Isso também pode ser identificado usando o log lento conforme mencionado no comentário acima, desde que seja a consulta SQL que está causando o problema de desempenho.

Definitivamente, eu também recomendaria atualizar sua instância do Moodle para algo mais recente, pois sei que houve muitas correções de desempenho enviadas para o repositório upstream desde o Moodle 2.2.3. Costumávamos transferi-los para o Moodle como parceiro oficial do Moodle.

informação relacionada