[FUG-BR] Tuning kernel Apache

Leonardo Augusto lalinden em gmail.com
Segunda Novembro 28 17:50:32 BRST 2011


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..
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


Mais detalhes sobre a lista de discussão freebsd