[FUG-BR] Tuning kernel Apache

Leonardo Augusto lalinden em gmail.com
Terça Novembro 29 18:48:36 BRST 2011


Esse site é meio antigo, mas é uma boa referencia para entender tudo
que envolve servir várias conexões simultaneas.

A partir dele se descobre várias outras coisas.

http://www.kegel.com/c10k.html

[]´s


2011/11/29 Marcelo Gondim <gondim em bsdinfo.com.br>:
> Em 29/11/2011 02:17, Paulo Henrique escreveu:
>> Marcelo Gondim, porei gerar um case para poder apresentar nos eventos.
>> Eu tenho ainda o meu ambiente mais nada monstruoso como o seu.
>> No maximo que possuo é 300mbps no servidor de backup.
>> Estou muito enferrujado, mais estive trabalhando em documentação para o
>> PFSense.
>> Logo vou disponibiliza-la.
>
> Opa Paulo,
>
> Uma boa idéia. Vou preparar os slides e depois disponibilizar. Essa
> semana estarei de mudança, mas com certeza vou preparar e se alguém
> quiser usar como Case será um prazer.
> Se aparecer algum evento no Rio ou aqui pela Região dos Lagos e precisar
> de um palestrante é só falar. Poderei ser a prova viva que FreeBSD
> existe e mudou minha vida. :D
>
>>
>> É só os interessados se dedicar 30 minutos do dias que em dois meses temos
>> material e palestrantes organizados para seguir em caravana.
>>
>> Abraços, assim que a documentação sobre QoS sobre o PFSense 2.0 estiver
>> ponto disponibilizo no Fug.
>>
>> att.
>>
>>
>> Em 29 de novembro de 2011 01:02, Marcelo Gondim<gondim em bsdinfo.com.br>escreveu:
>>
>>> Em 28/11/2011 17:50, Leonardo Augusto escreveu:
>>>> Ummm essa questão(ao meu ver), envolve vários fatores, espero poder te
>>>> ajudar te indicando a observar alguns detalhes:
>>>>
>>>> - overview - fatos - porque dê - pra quê ffeebsd
>>>>
>>> -----------------------------------------------------------------------------------------------------
>>>> - se tunares o freebsd corretamente, muito provavelmente, não obterás
>>>> desempenho melhor de SO (no mesmo hardware, x86) para a aplicacao que
>>>> desejas.
>>>> - mesmo que voce "soque" tudo num servidor apenas, apache, mysql, etc
>>>> - enquanto tens poucos acessos "todo mundo" é "igual" ou "mais rapido"
>>>> que o Freebsd, aparentemente, ehe.
>>>> - agora, quando "tacar" "trocentos" mil hits em cima, aí que a coisa
>>>> começa a se definir, quando o swap(virtual memory) começar a ser
>>>> usado, as máscaras caem.
>>>> - já vi um benchmark do bsd 7.2 com mysql apache e etc, no mesmo
>>>> hardware, em relacao a um linux, na epoca o mais recente tambem.
>>>> até certo ponto(enquanto nao usava-se swap e com xxx conexoes
>>>> simultaneas) o linux era levemente superior ao bsd em desemepenho,
>>>> quando o numero de conexcoes chegou a XX.XXX  e o swap comecou a se
>>>> fazer necessario,
>>>> o linux degradou ABSURDAMENTE, VERGONHOSAMENTE, LIXOSAMENTE,
>>>> TOSCAMENTE HORRIVELMENTE NOJENTAMENTE a performance, o cara nem
>>>> conseguia entrar com o ssh na maquina..
>>> Concordo contigo Leonardo. Trabalhei com Linux desde 1996, em 2000 fui
>>> até funcionário da Conectiva como consultor e posso te dizer que no
>>> início o kernel do Linux não tinha obviamente todos os recursos que tem
>>> hoje, mas eu sentia muito mais estabilidade naquela época do kernel
>>> 1.2.13 e 2.2 que hoje.
>>>
>>> Acho que já contei aqui porque resolvi migrar meus servidores Linux para
>>> FreeBSD mas se não contei aqui vai:
>>>
>>> Atualmente sou Gerente de TI de um Provedor aqui da Região dos Lagos -
>>> RJ. Nós atuamos em 4 cidades: Araruama, São Pedro, Saquarema e Rio
>>> Bonito. Os links das Cidades somados batem 560Mbps mas temos um link de
>>> sobra de 700Mbps. Quando tínhamos Linux fazendo a infra no início era
>>> tranquilo e não tínhamos problemas mas o tráfego foi crescendo à medida
>>> que crescia nossa carteira de clientes e chegou em um ponto que
>>> simplesmente em determinados picos de tráfego começavam os travamentos
>>> de rede. Subia ksoftirq à dar com pau e tentamos de tudo:
>>>
>>> - Kernel tunado e compilado com versões mais recentes.
>>> - Removi todo o stateful do sistema deixando ele totalmente stateless. A
>>> tabela de conntrack nem existia.
>>> - Reduzi regras de Firewall para o básico deixando o sistema mais leve
>>> de regras.
>>> - Trocamos as interfaces de rede de Intel Gigabit por outras Intel
>>> Gigabit Server, troquei os equipamentos para Dual Quad Xeon com 8Gb de ram.
>>> - Trocamos a switch existente por uma Cisco Catalyst bam bam bam com
>>> todas as portas Gigabit.
>>> - Usava Debian 6 e CentOS 5.5 e nenhum deles se comportou como deveria.
>>> - Fiz um CPU affinity jogando as interrupções das interfaces de rede uma
>>> pra cada CPU, para evitar uma migração de entre CPUs e  dar problemas
>>> com o tráfego.
>>> - Fiz tunning no TCP/IP.
>>> - Troquei até de escalonador no kernel e nada.
>>>
>>> Fiz isso tudo acima e mais coisas que não lembro agora de cabeça. Depois
>>> de penar quase 1 mês com problemas intermitentes resolvi seguir um
>>> conselho de uma pessoa na lista do nic.br que me disse para testar o
>>> FreeBSD. Bem eu já havia feito um treinamento com na FreeBSD Brasil uns
>>> meses antes e pensei... Por que não?
>>>
>>> Simplesmente peguei o mesmo hardware que usei antes de trocar para o
>>> Dual Quad Xeon, um Xeon simples com 4Gb de ram apenas. As mesmas
>>> interfaces de rede Intel Gigabit. O mesmo sistema de gerenciamento que
>>> usava com Apache + PHP + Mysql. Só tive que passar as regras que tinha
>>> no IPtables para o pf e ipfw e pronto.
>>> Tudo passou à funcionar perfeitamente e sem as travadas de rede e usando
>>> um hardware inferior, o que já estava desde o início "dando problema".
>>>
>>> Realmente na hora que mais precisei de poder e estabilidade de um
>>> sistema, o FreeBSD caiu como uma luva e o mais interessante foi que
>>> mesmo sem ter a menor experiência com o sistema pude, com poucos
>>> ajustes, resolver os problemas que aconteciam.
>>>
>>> É isso. :)
>>>
>>>> enquanto isso o Freebsd continuou mantendo seu desepenho como o vinha
>>>> fazendo com xx conexoes.. .o ssh entrava normal... e nao parece que
>>>> havia trocentas conexoes na maquina... INCRIVEL.
>>>> - sei que tem varias pessoas aqui que gostam e defendem o linux, mas é
>>>> fato, a VM e a pilha tcp e o IO do bsd sao imbativeis nesse caso.
>>>> - Nao vou citar o nome, mas conheco uma empresa de listas de email
>>>> online, tipo o yahoo groups, que comecou em linux, logo que o
>>>> movimento cresceu, TUDO SENTOU NA GRAXA, foi um desespero total,
>>>> quando a memoria se exauria, o linux travava... os caras iam trocar o
>>>> hardware, ate que decidiram antes testar o freebsd.... ahaha nem teve
>>>> graça, chegava a ter 3000 processos em PERL processando emails
>>>> e a maquina normal.... no mesmo hardware, o linux com 800 processos
>>>> PERL ja sentava  e travava.... ficava MUITO LENTO, a rede nao
>>>> funcionava, etc.
>>>> Os caras usam freebsd ate hoje, e enviam mais de 150 milhoes de emails
>>>> por mes !! fora acessos web, mysql etc..
>>>>
>>>> Enfim, poderia ficar o dia inteiro argumentando pq vc deve usar o
>>>> freebsd se pretende ter muitos acessos algum dia, é como vc ter um
>>>> .357 magnum pra caçar rato, é besteira, até o dia que sua familia
>>>> cresce
>>>> e voce precisa caçar um búfalo, um .22 que mata o rato, nem faz
>>>> cócegas no búfalo.
>>>> Voce só vai entender do que o freebsd é faz quando chegar esse momento.
>>>>
>>>> Essa é a minha opiniao baseada na minha experiencia, uso bsd a 13
>>>> anos, ja usei linux antes por 2 anos e SÓ ME LASQUEI com aquela
>>>> tranquera.
>>>> Aprendi UMA VEZ a configurar o freebsd na versao 3.x alguma coisa e
>>>> ate hoje nao mudou nada.... vai configurar um debian, um redhat e um
>>>> suse pra vc ver como é facil, kkkkk (nojento, irritante, tosco
>>>> aarrgggggg)
>>>> Tenho um servidor que comecou no freebsd 6.1, ja fiz upgrade dele até
>>>> o 7.2, desde la nao fiz mais e ele ja esta com uptime com mais de
>>>> 1.100( mil e cem ) dias....
>>>>
>>>> Bom, mas chega de bla bla bla pra argumentar pq eu acho que vc esta
>>>> fazendo uma boa escolha em usar freebsd, de olhos fechados..
>>>>
>>>> Agora vou dar minhas dicas diretas sobre o que eu acho que voce deve
>>>> tomar atencao para configurar seu servidor web.
>>>>
>>>> - meus beans - levando em conta APENAS UM SERVIDOR, rodando tudo nele,
>>>> e nao um cluster ou master slave, isso já seria outra historia.
>>>>
>>> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>>>> - esqueça virtualização, se quer algo hardcore, instale um bsd
>>>> nativamente no hardware.
>>>> - o hardware depende muito do tipo de aplicacao, algo baseado em mysql
>>>> tipo wordpress ou arquivos estaticos como fotos e downloads ???
>>>> - se for mais textual usando mysql, coloque a maior quantidade de ram
>>>> que puder, 32G por exemplo, num INTEL 64 bits mother de servidor e nao
>>>> desktop pelo amor de deus,
>>>> nao vai me comprar um PC na loja da esquina e querer transformar num
>>> servidor.
>>>> - se for muito acesso a fotos e downloads, tente por uma controladora
>>>> dedicada com RAID 10 com um bom cache, acho que hoje nao é mais SCSI e
>>>> sim SAS, isso sai caro.. .mas vale...
>>>> - tente uma placa moderna com FSB 1333
>>>>
>>>> - voce precisa recompilar o kernel, as versoes mais atuais do bsd
>>>> passaram tudo pro SYSCTL as confs que se fazia no kernel, entao o que
>>>> vc deve fazer é tirar tudo que é declaracao
>>>> de hardware nao presente, placas de rede, controladoras, etc, CAPA
>>>> TUDO FORA... de uma pesquisada sobre kernel tunning... sempre se acha
>>>> algumas dicas...
>>>>
>>>> - antes de recompilar o kernel e os ports que ira usar coloque isso no
>>>> /etc/make.conf
>>>>
>>>> CFLAGS= -O2 -pipe -funroll-loops -ffast-math
>>>> COPTFLAGS= -O2 -pipe -funroll-loops -ffast-math
>>>> WITHOUT_X11=yes
>>>> NO_X=yes
>>>>
>>>> - meu sysctl.conf ( pesquise sobre as opcoes, pode melhorar ou
>>>> adicionar algo, os buf ali podem ser tunados segundo o caso )
>>>>
>>>> machdep.hyperthreading_allowed=1
>>>> security.jail.set_hostname_allowed=0
>>>> security.jail.allow_raw_sockets=1
>>>> security.jail.socket_unixiproute_only=1
>>>> security.jail.sysvipc_allowed=0
>>>> security.jail.enforce_statfs=2
>>>> security.jail.allow_raw_sockets=1
>>>> security.jail.chflags_allowed=0
>>>> kern.maxfiles=65535
>>>> kern.maxfilesperproc=32768
>>>> kern.ipc.somaxconn=8192
>>>> kern.ipc.maxsockbuf=2097152
>>>> kern.ipc.maxsockets=81920
>>>> kern.ipc.shmmax=33554432
>>>> kern.ipc.shmall=32768
>>>> kern.polling.enable=1
>>>> kern.polling.user_frac=50
>>>> vfs.vmiodirenable=1
>>>> vfs.ufs.dirhash_maxmem=67108864
>>>> kern.maxvnodes=500000
>>>> net.inet.ip.check_interface=1
>>>> net.inet.udp.blackhole=1
>>>> net.inet.tcp.blackhole=2  # blackhole pings, traceroutes, etc.
>>>> net.inet.icmp.icmplim=100
>>>> net.inet.ip.fw.dyn_max=4000
>>>> net.inet.tcp.sendspace=65535
>>>> net.inet.tcp.recvspace=32768
>>>> net.inet.udp.recvspace=65535
>>>> net.inet.udp.maxdgram=57344
>>>> net.local.stream.recvspace=65535
>>>> net.local.stream.sendspace=65535
>>>>
>>>> - se voce puder instalar tudo via ports, (atualize o mesmo antes ok)
>>>> eu recomendo, pois se voce usar o portupgrade, pode manter tudo
>>>> atualizado facilmente.
>>>> voce sempre pode dar um make extract a "mecher" nas configuracoes dos
>>>> makes se precisar para tunar algo.
>>>>
>>>> - O apache pode ser usado no bsd de maneiras diferentes, prefor MPM ou
>>>> worker MPM, sao coisas diferentes, pesquise sobre.
>>>> - Se vais usar muito arquivo estatico, tente usar o lighttpd ou o
>>>> nginx no lugar do apache, para arquivos estaticos eles sao mais
>>>> eficientes.
>>>> - se for usar php, utilize o modo com fast-cgi, nao use o mod_php...
>>>> (estufa o apache sem necessidade), voce tem mais beneficios como
>>>> mod_fastcgi e o php
>>>> rodando em separado do apache.
>>>>
>>>> - Se for usar php acessando mysql, tente usar o MEMCACHE, vais te salvar
>>> a vida.
>>>> - O memcache tambem pode ser usado com o apache para arquivos
>>>> estaticos.. mas acho que nao vale a pena, use o lighttpd ou o nginx
>>>> pra isso.
>>>>
>>>> - Tunar o mysql tb é muito importante... bem como sua aplicacao nao
>>>> conter erros ridiculos como uma consulta sem indice ou com indice
>>>> errado... nao tem cristo que va resolver teu problema nesse caso.
>>>>
>>>> - O file system default do bsd tambem precisa de alguns ajustes, se
>>>> tiver muitos acessos a arquivos, voce pode tirar fora o softupdates,
>>>> mas o risco nao vale a pena, se tiver uma queda de energia
>>>> podes perder muita coisa, mas o ganho de performance é substancial,
>>>> mas acho que nao seja o teu caso.
>>>> eu apenas tiro fora o esquema de atualizar o last access do arquivo,
>>>> uma bobagem la que da diferenca, tal do "noatime", mude entao no fstap
>>>> e ponha essa opcao na particao onde os arquivos iram ficar.
>>>> Eu deixei assim:
>>>>
>>>> /dev/aacd0s1d           /tmp            ufs     rw,noatime      2       2
>>>> /dev/aacd0s1f           /usr            ufs     rw,noatime      2       2
>>>> /dev/aacd0s1e           /var            ufs     rw,noatime      2       2
>>>>
>>>>
>>>> E assim cara, por aí vai... mas tenha dúvida que o freebsd irá
>>>> suportar bem qualquer extremo que vc venha a ter.
>>>>
>>>> Se eu puder ajudar mais, sinta-se a vontade para me chamar em pvt que
>>>> conversamos sobre o caso.
>>>>
>>>> Ah e nao se esquece que fazer testes com o "ab" a partir de outra
>>>> maquina ajuda muito a vc detectar os gargalos.
>>>> O freebsd por sí só nao vai te resolver, vc tem que setar ele e as
>>>> aplicacoes corretamente, e tudo sobre um hardware condizente e um link
>>>> mais ainda.
>>>> Se nao és sócio de um hosting, te aconselho um datacenter externo,
>>>> tipo nos eua, softlayer é muito bom, uso a 8 anos e NUNCA tive
>>>> problemas,
>>>> te colocam uma maquina a mais em ate 2h se precisar, ja possuem
>>>> solucao pra load balance nativo, etc, etc, etc
>>>>
>>>> Abraço
>>>> Leonardo
>>>>
>
> -------------------------
> Histórico: http://www.fug.com.br/historico/html/freebsd/
> Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd


Mais detalhes sobre a lista de discussão freebsd