Para configurar o Apache para usar mais a sua CPU, você precisa se livrar do gargalo que atualmente está impedindo o Apache de usar mais CPU. Como os pedidos levam de 3 a 8 segundos para serem concluídos, você sabe que há algum tipo de gargalo, você precisa encontrá-lo.
As coisas para ver são:
- Determine se o host do Apache é o gargalo. Se você executar
uptime
enquanto as solicitações estiverem demorando de 3 a 8 segundos, a carga será mostrada como alta (nos dígitos duplos ou triplos)? Você não pode realmente ler muito sobre isso, porque uma carga alta pode significar que o problema existe em outro lugar, mas se a carga estiver baixa enquanto as solicitações estiverem demorando de 3 a 8 segundos, provavelmente é um problema remoto. - Se você tiver recursos exigidos por esse serviço em outras máquinas, como um banco de dados, verifique também o carregamento do sistema.
- Observe a saída de "vmstat 1" no servidor. Isso mostrará as estatísticas de utilização do sistema, atualizadas a cada segundo. As coisas para olhar são "cpu wa" (se for dois dígitos provavelmente significa que o disco está saturado), e "swap si / so" (se não forem zero significa que você está sem memória), e "cpu id "(tempo ocioso da CPU, se este for < 10, sua CPU está saturada). Se o tempo "cpu sy" é alto, isso pode indicar que você está forking muito (talvez o Apache MaxRequests seja muito baixo?) Ou outro overhead no nível do kernel. Pressione Control-C para finalizar a saída "vmstat 1".
- Você pode executar "strace -p [APACHE PROCEED ID]" para ter uma ideia do que os processos do Apache estão fazendo. Isso mostra as chamadas do sistema que estão fazendo, mas se você não estiver familiarizado com as chamadas do sistema, às vezes, poderá obter informações apenas lendo a saída como texto. Por exemplo, na semana passada eu tive um servidor que estava agindo como o seu e o strace fazia uma pausa por vários segundos com a última coisa que era exibida era uma mensagem de log, e eu rastrei para um arquivo PHP que estava enviando um monte de log mensagens para o syslog.
Se você não tem "munin" instalado, provavelmente deveria. Se fizer isso, examine os gráficos para ver como a utilização do sistema muda quando o sistema está respondendo lentamente e quando está funcionando bem. Se você ver saltos nos gráficos, eles podem indicar onde está o gargalo. Se você vir áreas em branco em all os gráficos, isso provavelmente significa que o sistema está saturado. Se apenas os gráficos do Apache estiverem em branco, isso provavelmente significa que o Apache atingiu suas conexões máximas, provavelmente um efeito colateral dos problemas de desempenho.
Observe também que, se você tiver várias CPUs, mas tiver um aplicativo single-threaded como o Zope sentado atrás do Apache, pode ser que uma de suas CPUs esteja saturada, onde as outras estão ociosas. Se você pressionar "1" na parte superior, isso mostrará a utilização de cada núcleo individual. Procure um que esteja a 0% inativo o tempo todo, onde os outros estão muito mais ociosos.
Usando essas técnicas, consegui isolar e resolver a maioria dos problemas de desempenho semelhantes a isso.