pedradegelo 3 Denunciar post Postado Novembro 27, 2012 Olá pessoal! Estou com um abacaxi bem grande para descascar com o Apache, não sei mais o que fazer. Tenho o seguinte VPS no vps.net: 21ghz cpu 7400mb memória 1gbps na distribuição Linux Debian x64 LAMP O Apache Worker está da seguinte forma: KeepAlive On MaxKeepAliveRequests 0 KeepAliveTimeout 1 <IfModule mpm_worker_module> MaxClients 4000 ThreadsPerChild 50 ServerLimit 80 </IfModule> Toda rodada do brasileirão, na hora dos jogos, o pico de acessos do blog é bastante incrementado. O problema é quando o número de acessos simultâneos está alto. Estou utilizando como contador o whos.amung.us. Quando está em 2500+ começa a engasgar. Digamos, de cada 5 requisições no browser, 3 dá 404 e 2 renderiza o site após 10 segundos. O uso de memória naquele momento nunca ultrapassa 1400mb. Alguma idéia??? Compartilhar este post Link para o post Compartilhar em outros sites
pedradegelo 3 Denunciar post Postado Novembro 27, 2012 veja se ajuda: http://forum.imasters.com.br/topic/291988-otimizando-performance-servidor-apache/ veja se ajuda: http://forum.imasters.com.br/topic/291988-otimizando-performance-servidor-apache/ Olá hinom, eu comecei com o prefork, mas ai tive o msmo problema. Aí migrei pro worker... mas ainda não consigo resolver. Hardware sobrando... Site quase com php estatico... e trava =/ Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Novembro 27, 2012 Vamos por partes... Todos os módulos que você não precisa já estão "desligados"? O que mais roda neste servidor? Sabemos que o Apache roda com PHP. O que mais tem? MySQL, Postgres, etc? Informe sobre os módulos do PHP também e configurações de tempo do php.ini (max_execution_time por exemplo). Desse número que você informa, são quantas conexões e quantos simultâneos? Tente esta config: StartServers 4ServerLimit 8 MaxClients 32 MinSpareThreads 4 MaxSpareThreads 16 ThreadsPerChild 4 MaxRequestsPerChild 1000 Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Novembro 28, 2012 veja as quesões do #4 e, se puder verifique nos logs de erros se não apresenta mensagens de conflitos do worker ou mesmo prefork... tenho alguns sistemas em vps com centos 5.5 com problemas assim.. pode não ser o seu caso, mas é bom analisar Compartilhar este post Link para o post Compartilhar em outros sites
pedradegelo 3 Denunciar post Postado Novembro 28, 2012 Vamos por partes... Todos os módulos que você não precisa já estão "desligados"? O que mais roda neste servidor? Sabemos que o Apache roda com PHP. O que mais tem? MySQL, Postgres, etc? Informe sobre os módulos do PHP também e configurações de tempo do php.ini (max_execution_time por exemplo). Desse número que você informa, são quantas conexões e quantos simultâneos? Tente esta config: StartServers 4 ServerLimit 8 MaxClients 32 MinSpareThreads 4 MaxSpareThreads 16 ThreadsPerChild 4 MaxRequestsPerChild 1000 Prog, "módulos que você não precisa" -> a que módulos você se refere? O mysql está no sistema, mas apenas para o admin. Quando o publico acessava via mysql, só rodava 900 simultaneo (muito mal). Ai fiz uma rotina pra escrever json a cada 30 segundos e o povo começou a pegar via json. Ele estava na locaweb e teve dias que aceitou até 6850 pessoas acessando simultaneamente (contado pelo who.amung.us). Mas fui expulso de lá devido ao estouro do tráfego mixuruca deles de 300gb (gastava 100gb/rodada do brasileirão). Agora no vps.net a mesma aplicação está parando nos 2500 simultaneos. Eu diria q ela gasta apenas memória. O max_execution_time está em 30 e o max_input_time em 60. O memory_limit está em 128mb. Nos logs do apache consta apenas alguns warnings do php, tais como "var not defined". Sobre a config que você passou, pelo que interpretei ThreadsPerChild 4 x ServerLimit 8 daria 32 conexoes simultaneas neh. Isso não faria nem cócegas certo? Alguma idéia (sem ser balanceamento de carga)? veja as quesões do #4 e, se puder verifique nos logs de erros se não apresenta mensagens de conflitos do worker ou mesmo prefork... tenho alguns sistemas em vps com centos 5.5 com problemas assim.. pode não ser o seu caso, mas é bom analisar hinom, #4 você se refere que é o "SendBufferSize"? Se sim, onde habilita isso? Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Novembro 28, 2012 Você pode mostrar/falar mais sobre sua aplicação? De quantos usuários simultâneos e ativos sua aplicação precisa? Lembre-se, em informática, tudo tem um limite. O que eu quero dizer com a frase acima? Bom, eu quero ter 4000 usuários concorrentes ativos! :)/>/>/> Tudo bem, o cálculo base para saber quanto de recurso você pode ter... 150 clientes * GB RAM, ou seja, se você tem 7GB, 150 * 7 = 1050 usuários concorrentes. Este número é o "ideal". Ah, mas eu consegui chegar a 6234598756689 pelo amung.us. Não sei como isso funciona, mas não me parece ser uma estatística de acessos concorrentes. Também não é possível fazer um teste de carga com o ab (Apache Benchmark). Para isto seria necessário uma rede de equipamentos e uma conexão colossal. --------------------------------------- Voltando... Módulos do apache: mod_ssl (para conexão segura, se não estiver usando HTTPS, desabilitar); mod_rewrite (para "re-escrita" da URL, utilizado em URL amigáveis e proteção, se sua aplicação não precisa desse recurso, desabilitar); mod_deflate (para compactação de conteúdo, é bem util, mas se você não usa, desabilitar); Fora tantos outros que podem estar habilitados sem necessidade. Veja aqui: http://httpd.apache.org/docs/2.0/mod/ (desconsidere a lista de módulos core) Estatísticas do Apache: Para saber as conexões concorrentes e ativas no sistema na porta 80: # netstat -pan | grep :80 | wc -l Para saber threads em execução do Apache: # ps -aufx | grep httpd | wc -l Uma outra coisa que pode te trazer informações em tempo real é o módulo status do Apache, leia mais aqui: http://httpd.apache.org/docs/2.0/mod/mod_status.html Sobre os valores que eu passei: ServerLimit 8 MaxClients 32 A quantidade máxima de conexões concorrentes seria: 8 * 32 = 256 conexões simultâneos. ThreadsPerChild esta equivocado na minha configuração, este parametro não faz parte do módulo prefork. Desconsidere! Aguardando mais informações! Compartilhar este post Link para o post Compartilhar em outros sites
pedradegelo 3 Denunciar post Postado Novembro 28, 2012 Você pode mostrar/falar mais sobre sua apli... Prog, sobre os modulos, estou usando apenas o rewrite. Vou verificar todos os outros e desabilitar. O número seguro realmente seria 4000. Nessa rodada 37, chegou no pico de 3700. Se quiser dar uma olhada: www.cartolacfds.com/scouts-ao-vivo Cada requisição consiste basicamente em ler o json via fread. Como eu estou no apache worker, o ThreadsPerChild é preenchido. eu ja cheguei definir 14gb de ram no prefork, lembro que estava +- assim: ServerLimit 8000 StartServer 8000 MinSpareThreads 800 MaxSpareThreads 14200 ThreadLimit 5 ThreadsPerChild 5 MaxClients 8000 MaxRequestsPerChild 0 ele usava 11gb dos 14gb de memoria, mas gerava o mesmo problema. Por isso q tentei migrar para o worker, aí um colega lá do stack overflow me passou aquela configuração que postei no inicio. Não entendi isso: 150 clientes * GB RAM, ou seja, se você tem 7GB, 150 * 7 = 1050 usuários concorrentes. Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Novembro 28, 2012 Ok, desculpe, não sei pq achei que estivesse usando prefork. Não entendi isso: 150 clientes * GB RAM, ou seja, se você tem 7GB, 150 * 7 = 1050 usuários concorrentes. Isto é o recomendado, 150 clientes para cada GB de memória. Estou levando em consideração a informação do tópico, onde você informa que seu servidor possui 7400MB de memória. Compartilhar este post Link para o post Compartilhar em outros sites
pedradegelo 3 Denunciar post Postado Novembro 28, 2012 Ok, desculpe, não sei pq achei que estivesse usando prefork. Isto é o recomendado, 150 clientes para cada GB de memória. Estou levando em consideração a informação do tópico, onde você informa que seu servidor possui 7400MB de memória. Entendi...atualmente com os 2500 ele está gastando 1300/7400. Há muita memória ociosa. Estranho demais não? Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Novembro 28, 2012 Esta usando algum comando para ver a memória ou esta recebendo esta informação de outra forma (uma página web, por exemplo)? Para o módulo worker os números são outros, vou avaliar aqui e te passo um exemplo. ---------------------------- Bom, pelo que deu pra entender até agora sua aplicação não usa MySQL, mas você faz requisições assíncronas em outra página, que deve ser a página da SportTV. Estou correto? Você também leve em consideração o tempo de resposta do portal da SportTV quando o seu sistema esta ruim? Compartilhar este post Link para o post Compartilhar em outros sites
pedradegelo 3 Denunciar post Postado Novembro 28, 2012 Esta usando algum comando para ver a memória ou esta recebendo esta informação de outra forma (uma página web, por exemplo)? Para o módulo worker os números são outros, vou avaliar aqui e te passo um exemplo. ---------------------------- Bom, pelo que deu pra entender até agora sua aplicação não usa MySQL, mas você faz requisições assíncronas em outra página, que deve ser a página da SportTV. Estou correto? Você também leve em consideração o tempo de resposta do portal da SportTV quando o seu sistema esta ruim? Prog, eu uso o free -m pra ver a memoria. As requisições assincronas eu faço para pegar os dados do sistema de admin da pagina. Os meninos atualizam no mysql, ai tem uma rotina que escreve o json em cima dos dados deles. Portanto nada externo. Eu fiz com ajax, devido que precisa atualizar a página do publico a cada 60 segundos, porém não quis simplesmente dar o refresh na pagina para evitar o consumo, somente atualizo os dados via ajax. Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Novembro 28, 2012 Entendi...atualmente com os 2500 ele está gastando 1300/7400. Há muita memória ociosa. Estranho demais não? Esse cálculo que apresentei funciona bem para o prefork, para o worker é tudo diferente. Na verdade isto é uma média, pois vai depender dos módulos carregados. Compartilhar este post Link para o post Compartilhar em outros sites
pedradegelo 3 Denunciar post Postado Novembro 28, 2012 Esse cálculo que apresentei funciona bem para o prefork, para o worker é tudo diferente. Na verdade isto é uma média, pois vai depender dos módulos carregados. O osso é que no prefork tb deu essa cáca. Algo que eu acho relevante tb, digamos esses módulos afetam um poco, uma vez que há hardware sobrando. Quer dizer que se aumentar os users, daqui a pouco vai dar crash tb, msmo com os módulos apagados. Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Novembro 28, 2012 O que eu posso sugerir agora é que teste novamente com prefork, usando os parâmetros que passei anteriormente. PHP funciona melhor com prefork. O que me diz? Compartilhar este post Link para o post Compartilhar em outros sites
pedradegelo 3 Denunciar post Postado Novembro 29, 2012 cara, me ajuda a entender essas 2 imagens. estava conversando com um colega de trabalho pra ver o que poderia ser, ele pediu pra mim fuçar nos historicos do cpu. de uma olhada nisso: http://i49.tinypic.com/9r831t.jpg http://i46.tinypic.com/21ozceb.jpg http://i45.tinypic.com/5mzt54.jpg como é possivel? essa do dia 10 ate 12 esta incrivelmente pior, pq eu tava usando isso no prefork: ServerLimit 8000 StartServer 8000 MinSpareThreads 800 MaxSpareThreads 14200 ThreadLimit 5 ThreadsPerChild 5 MaxClients 8000 MaxRequestsPerChild 0 ai depois diminuiu pela "metade" pq mudei para o worker: <IfModule mpm_worker_module> MaxClients 4000 ThreadsPerChild 50 ServerLimit 80 </IfModule> Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Novembro 29, 2012 Informe quanto de memória um processo do Apache consome (média) no seu ambiente usando módulo prefork. (Deve ser algo entre 20 e 30MB) Quanto as imagens... não sei como seria possível usar mais que 100% do CPU de um sistema. Não sei qual o calculo que ele faz, se for um quad-core e, por isso, considera-se 400%, por exemplo, embora ainda pareça estranho, mas plausível. Quantos cores (CPU) tem seu VPS? Compartilhar este post Link para o post Compartilhar em outros sites
pedradegelo 3 Denunciar post Postado Novembro 29, 2012 Informe quanto de memória um processo do Apache consome (média) no seu ambiente usando módulo prefork. (Deve ser algo entre 20 e 30MB) Quanto as imagens... não sei como seria possível usar mais que 100% do CPU de um sistema. Não sei qual o calculo que ele faz, se for um quad-core e, por isso, considera-se 400%, por exemplo, embora ainda pareça estranho, mas plausível. Quantos cores (CPU) tem seu VPS? cara, quando eu seto para Dedicated CPU 21.6GHz RAM 7280MB ai digito mpstat ele diz que são 5 cpus. Compartilhar este post Link para o post Compartilhar em outros sites
pedradegelo 3 Denunciar post Postado Novembro 29, 2012 Pelo que diz aqui, é o que você disse: http://serverfault.com/questions/346410/cpu-utilization-over-100-in-linux-system como são 5 cpu, ele chega ao maximo de 500 neh... que m*****... Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Novembro 29, 2012 A memória que cada processo do Apache consome (média) em prefork é de extrema importância para passar uma configuração aceitável para o seu ambiente. ---------------------------- Uma configuração que eu acho aceitável para o seu ambiente. StartServers 100 ServerLimit 300 MaxClients 300 MinSpareThreads 100 MaxSpareThreads 300 MaxRequestsPerChild 5000 Quando você passar a quantidade de memória/processo podemos fazer um cálculo mais preciso. Compartilhar este post Link para o post Compartilhar em outros sites
pedradegelo 3 Denunciar post Postado Novembro 29, 2012 A memória que cada processo do Apache consome (média) em prefork é de extrema importância para passar uma configuração aceitável para o seu ambiente. ---------------------------- Uma configuração que eu acho aceitável para o seu ambiente. StartServers 100 ServerLimit 300 MaxClients 300 MinSpareThreads 100 MaxSpareThreads 300 MaxRequestsPerChild 5000 Quando você passar a quantidade de memória/processo podemos fazer um cálculo mais preciso. como eu descubro essa quantidade média de memória/processo ?? Se eu voltar para o prefork, poderia explainar a relação de MaxClients 300 para os 2500+ da nossa demanda? Compartilhar este post Link para o post Compartilhar em outros sites