na empresa em que comecei a trabalhar no dia 1. de julho, herdei, entre outros, um servidor Web que executa uma pilha MySQL / Apache na qual um site construído no Symfony está sendo executado.
O servidor roda o openSuSE 12.1 e tem uma CPU Intel Xeon 3470, com 12 GB de RAM. Exceto por rodar o site, o servidor não tem muito o que fazer.
Recebemos alguns picos de carga de servidor sérios, que se tornaram particularmente visíveis nas últimas duas semanas. Nesses momentos, a carga pode chegar a 40 a 60 (ocasionalmente até mais). Quando isso acontece fora do horário de expediente, vejo que o servidor não falha como tal, embora os navegadores não consigam acessar o site e, em cerca de 30 minutos, o servidor retorna ao carregamento normal. Quando isso acontece durante o horário de expediente, eu manualmente desligo o apache e o MySQL, deixo o servidor acalmar um pouco e depois começo tudo de novo.
Dos meus logs de acesso e consulta, não vejo nada particularmente fora do comum. Não tenho motivos para suspeitar de um DOS e posso ver que as consultas que às vezes levam um minuto ou mais para serem executadas durante esses picos de carga são executadas normalmente quando eu as ligo no meu servidor MySQL local ou quando elas são executadas pelo site circunstâncias "normais".
Resumindo: do que aprendi até agora, o problema parece ser que, em alguns momentos, o servidor começa a gerar grandes quantidades de processos do Apache, junto com um grande número de conexões MySQL. A maioria das conexões e processos não parece fazer tanto, em termos de CPU, mas eles preenchem a RAM.
Eu li o meu caminho através da rede e, em particular, parece que max_connections mysql-wise e wait_timeout, bem como talvez max_allowed_packet e Apache-wise ServerLimit, MaxClients. Não sei se há um tempo limite para processos de apache ociosos, mas posso imaginar que isso também ajudaria.
Apropos max_allowed_packet ... isso é definido como 209715200 (200 MB). Isso parece bastante alto, ou pelo menos parece explicar que com 40+ conexões abertas, fiquei sem memória (pelo menos, eu entendi que o MySQL aloca esses 200 MB por conexão, não importa se está dormindo ou não.
Um problema geral que tenho é que eu não sou realmente o maior herói quando se trata de ajuste de servidor: / principalmente, estou muito preocupado que qualquer mudança nos parâmetros de configuração mencionados acima possa matar as consultas ou pedidos em execução, ou causar seja qual for Havoc no funcionamento do site.
Ok, tudo isso não era realmente uma questão específica, mas mais uma descrição do problema. No entanto, qualquer conselho ou ajuda é bem-vindo, já que eu não estou realmente fazendo nenhum progresso ...
Felicidades, Constantijn
Tags mysql apache-2.2 symfony