[FUG-BR] Servidor com load altíssimo

Leonardo Augusto lalinden em gmail.com
Sexta Julho 6 11:13:35 BRT 2012


Amigo,

Se voce ta rodando no linux, tudo bem, dessa vez passa, ehehe

Mas vamos la ao seu caso.

Sem nem ver nada, posso afirmar com 100% de certeza o seguinte:

"Seu problema esta em como sua aplicacao foi escrita e como esta configurada".

Pq digo isso ? pq é um site pelo visto com php e mysql.

Vou dar umas dicas que vc tem que observar nas duas esferas, da
aplicacao e da estrutura onde a mesma roda.

1) a observar na aplicacao:
-------------------------------------------------------------

- suas queryes nao estao mal feitas ? falta de indicies ou joins
montados de maneira inversa ?
erros de sql DETONAM qualquer sistema, pode por um 300 core que nao
vai resolver se sua modelagem
estiver errada, isso é a pirmeira coisa a ser vista. o que tem de
erros de relacionmento e consultas mal
feitas por aí, é impressionante. revise isso e tenha certeza que tudo
esta correto.

- sua aplicacao é baseada em texto ou imagem ? tem mais acesso ao
banco ou a static files ?
se for a static files, veja os concerns relacionados ao fs, como
desativar o uatime por exemplo, e os tunnings
do apache, se for o caso, utiliza o lighttpd para isso.

- 99,99% da lerdeza em sites com php/mysql, está relacionada a
estrutura relacional utilizadada e as consultas
feitas sobre a mesma, é um conjunto, modelo mal feito(falta de indices
por exemplo) com SQL errado, detona qualquer
coisa cara, volto a dizer, revise isso, nao se engane com a inocencia
de um join ou left join, se nao tiver as keys
ou a orgem for a errada, ferrou geral....


2) a observar na estrutura onde roda a apalicacao
-------------------------------------------------------------------------------
( tenha certeza que no item 1 acima seu sql e sua estrutura esta
correta, do contrario esquece)

- usar o mysql no freebsd sem threads de processo, ou seja, apenas um
processo do mysql rodando.
- usar myisam ou innodb depende da aplicacao, fazer os tunings
relativos a cada caso. (mysql precisa de pelo menos 4G de ram se a
base for grande)
- tunar o apache corretamente, tem 200 tutoriais na net, proura por
apache mysql php tuning e ve se acha algo que melhore teu setup.
- utilize um acelerador/cache para o php, como o xcache ou o APC. isso
é imprescindivel para o php !!!!!!!!!

- NAO USE conexoes permanentes entre o php e o mysql, ta ligado ? la
no php.ini, fazer com que o apache crie e feche a conexao com o mysql
a cada requisicao, acredite, melhora muito o desempenho com muitos
acessos, pois faz o mysql se refreshar...
ou seja, se nao tiver ninguem acessando o site, deve ter ZERO conexoes
no mysql, o apache nao deve manter as conexoes ativas durante os
requests.

- AGORA VEM O MAIS IMPORTANTE DE TUDO.
- USAR O MEMCACHE NA PARADA,
- USAR O SESSION DO PHP SALVO NO MEMCACHE
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- USAR O SESSION DO PHP SALVO NO MEMCACHE
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- USAR O SESSION DO PHP SALVO NO MEMCACHE
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- USAR O SESSION DO PHP SALVO NO MEMCACHE
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- USAR O SESSION DO PHP SALVO NO MEMCACHE
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ENTENDEU BEM ISSO ???????????  (eheh é serio cara vai por mim, isso
faz toda a diferenca)

Se é um site onde o conteudo da home vem do mysql, e muda pouco ao
longo do dia, o memcache vai livrar seu mysql do trabalho,
cara, chega a ficar 500 MILHOES  de vezes mais rapido se usar o
memcache, kkkk, pode acreditar nissso, é absurda a diferenca.
Provavelmente voce nao esta utilizando o memcache, se esta, nao o esta
fazendo corretamente.

- voce pode usar o memcache para cache de arquivos estaticos para o
apache tambem, o que melhora muito tambem.
- nao usar logs no apache, esquece isso, dns do ip de acesso pior
ainda, se tiver fazendo isso tem que dar um tiro na cabeca.
- se tem muito acesso, so logue os erros mesmo, logacc tem que abolir.

- muita ram na sua maquina se faz necessario, 16G pelo menos, ideal é
uns 24G, ai coloca uns 16G so pro memcache, quero ver ficar lento....

- rodar essa tranquera toda num FREEBSD, tunado e com tudo compilado
com opcoes de otimizacao no make.conf, -O2 la etc....


Bem, se voce garantir que isso tudo esta correto e esta sendo feito, e
ainda assim ficar lento ou com muito processamento, só se seu sql
exige consultas complexas a cada request e que retornem um enorme
numero de linhas. Aí só com cluster mesmo cara.
Mas em geral o memcache resolve 90% dos problemas de desempenho.


RESUMINDO:

1) sql tem que estar correto, indices e joins das consultas.
2) Usar acelerador para php, xcache, apc, etc
3) Tunar o bsd, o apache e o mysql, nao usar conexoes persistentes
entre apache e mysql (nada de resolver dns no apache hein)
4) Usar memcache para as QUERYES mais usadas da aplicacao. pode ser
usado para static files se for o caso
5) PASSAR O SESSION DO PHP PARA O MEMCACHE se virar com ele. (isso é
mais importante que respirar hoje em dia)
6) Muita ram, muita ram, taca uns 6G pro mysql e uns 12-16 pro memcache.

O que me vem a mente agora como principal é isso.

E ai, o que me diz ?

Abraco
Leonardo


Mais detalhes sobre a lista de discussão freebsd