[FUG-BR] Servidor com load altíssimo

Marcelo Gondim gondim em bsdinfo.com.br
Segunda Julho 9 10:42:25 BRT 2012


Em 08/07/2012 11:36, Leonardo Augusto escreveu:
> Bom Marcelo,
>
> Pelos graficos que voce me mandou, por hora, sao mais de 3000 selects
> contra 700 inserts... entao nao sei se foi com ou sem o tal anounce
> rodando, mas tem bem mais select que insert.

Tava sem announce rsrsrs o announce arregaça tudo ahahha

>
> O que ja vi tambem, é que esse sistema é um sistema opensource, ja
> baixei ele pra dar uma olhada, vi que no index tem um select
> sinistro la, que o memcache ajudaria muito.

É ele vai tentar usar sim o memcache. Infelizmente tive que por o Debian 
lá dessa vez. Nossa está muito mas muito rápido sem fazer quase que nada.
Mas mesmo assim ele quer implementar o memcache sim. Só vamos preparar 
tudo com calma agora.  :D

>
> MAS CLARO, TEM UM POREM BEM BOM PRA UM DOMINGO DEMANHA, KKKK
>
> teu "programador" php ta relutante a usar o memcache, pq NAO FOI ele
> que desenvolveu esse sistema e por o memcache ali da um pouco
> de trabalho, pois tem que entender/alterar a classe de acesso ao
> mysql, se bem que vi que a maioria ta usando as funcoes @mysql nua a
> crua...
> o que é ridiculo, quando deveria ser uma classe responsavel por isso,
> para justamente nao ter que correr o sistema todo para alterar
> qualquer
> comportamento do mysql.
> O fato é esse, o magrao do php ta mais perdido que cusco no meio de
> procissao, kkk

ehheeh mas agora ele quer implementar isso sim. Vou até depois te mandar 
uns e-mails pvt.


> Uma duvida que tenho que faz muita diferenca é a seguinte:
>
> - esse sistema é acessado(alguma url dele) pelos clientes de torrent ?
> por exemplo, se peguei um link dum torrent do teu site
> e to baixando o torrento no meu MICRO TORRENT NA MINHA MAQUINA, o
> microtorrent ele por si só acessa o site ? ou o proprio
> site que usa o anounce quando eu clico num link do mesmo ?
> resumindo: algum agente externo(cliente de torrent) atualiza algo no
> site, ou tudo acontece a partir dos clicks no site ?

O problema são o número de conexões ao mysql que chega à 4000. Tipo 
vamos dizer que você tenha uns 30 torrents compartilhando. Cada vez que 
você pára um torrent, inicia, termina de baixar e fica de seeder, começa 
à baixar outro, o cliente torrent (ex. utorrent) vai no announce usando 
uma passkey tua, e faz a atualização na base de dados, update, insert, 
essas coisas pra atualizar as informações sobre o que você tá fazendo. É 
assim por exemplo que o seu ratio sobe ou desce, porque em sites de 
torrent fechados você não pode ter ratio baixo porque senão você é 
banido. :) Agora você coloca aí uns 400mil peers pessoas fazendo isso. 
rsrsrsr é muita conexão concorrente na base. Tudo com update, insert, 
etc  :)

Pelo que li lá nos caras do mysql. No linux eu consigo chegar até 4000 
conexões tranquilo com uma certa quantidade de memória. Mas se eu coloco 
4000 conexões no mysql do freebsd o sistema me pede mais de 70Gb de ram.
Vi outros relatos sobre isso também na minha pesquisa, pessoas 
reclamando do mysql no freebsd quando a carga é alta.

top - 10:01:12 up  7:51,  1 user,  load average: 0.79, 0.75, 0.71
Tasks: 2067 total,   2 running, 2064 sleeping,   0 stopped,   1 zombie
Cpu(s): 13.4%us,  2.6%sy,  0.0%ni, 83.3%id,  0.3%wa,  0.0%hi, 0.4%si,  
0.0%st
Mem:  24678000k total, 16547540k used,  8130460k free,   209944k buffers
Swap:  7812492k total,        0k used,  7812492k free,  6641460k cached

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
15351 mysql     20   0 2190m 837m 7536 S  265  3.5  94:21.35 mysqld
14453 www-data  20   0  254m  14m 4060 S    3  0.1   0:00.57 apache2
  6383 root      20   0 20700 3024 1020 R    2  0.0   0:02.32 top
18700 www-data  20   0  254m  15m 4064 S    2  0.1   0:00.52 apache2
  5383 www-data  20   0  254m  15m 3992 S    2  0.1   0:00.78 apache2
14593 www-data  20   0  255m  15m 4072 S    2  0.1   0:00.52 apache2
10539 www-data  20   0  254m  15m 4112 S    1  0.1   0:02.37 apache2
27538 www-data  20   0  254m  15m 4076 S    1  0.1   0:01.93 apache2
  4866 www-data  20   0  254m  14m 3884 S    1  0.1   0:00.18 apache2
  5442 www-data  20   0  253m  13m 3916 S    1  0.1   0:00.46 apache2
  8461 www-data  20   0  254m  15m 4004 S    1  0.1   0:01.36 apache2
  8583 www-data  20   0  253m  13m 3888 S    1  0.1   0:00.13 apache2
  9040 www-data  20   0  254m  14m 4052 S    1  0.1   0:00.45 apache2
10561 www-data  20   0  254m  14m 4008 S    1  0.1   0:02.36 apache2
11519 www-data  20   0  254m  14m 3948 S    1  0.1   0:00.53 apache2
15082 www-data  20   0  254m  14m 3948 S    1  0.1   0:00.31 apache2
15574 www-data  20   0  254m  15m 3956 S    1  0.1   0:00.29 apache2
28101 www-data  20   0  254m  14m 4032 S    1  0.1   0:00.22 apache2
28382 www-data  20   0  254m  15m 4032 S    1  0.1   0:00.26 apache2
28392 www-data  20   0  254m  14m 3828 S    1  0.1   0:00.19 apache2
29783 www-data  20   0  252m  13m 3896 S    1  0.1   0:00.13 apache2
31990 www-data  20   0  254m  15m 3940 S    1  0.1   0:00.17 apache2
32356 www-data  20   0  254m  15m 4076 S    1  0.1   0:02.13 apache2
  2815 www-data  20   0  254m  15m 4056 S    1  0.1   0:01.02 apache2
  2932 www-data  20   0  254m  14m 4088 S    1  0.1   0:00.98 apache2
  2950 www-data  20   0  254m  14m 3944 S    1  0.1   0:00.60 apache2
  3719 www-data  20   0  254m  14m 3912 S    1  0.1   0:00.60 apache2
  3788 www-data  20   0  256m  16m 4076 S    1  0.1   0:00.70 apache2
  5390 www-data  20   0  254m  15m 4056 S    1  0.1   0:00.82 apache2
  5455 www-data  20   0  254m  14m 4080 S    1  0.1   0:00.54 apache2
  6281 www-data  20   0  254m  14m 4080 S    1  0.1   0:01.02 apache2
  6416 www-data  20   0  254m  14m 4092 S    1  0.1   0:01.42 apache2
  8003 www-data  20   0  253m  14m 4208 S    1  0.1   0:02.90 apache2
  8005 www-data  20   0  254m  15m 4080 S    1  0.1   0:02.84 apache2
  8021 www-data  20   0  254m  15m 4088 S    1  0.1   0:02.80 apache2
  8587 www-data  20   0  254m  15m 4220 S    1  0.1   0:02.44 apache2
  8721 www-data  20   0  253m  13m 3772 S    1  0.1   0:00.10 apache2

Taí ele funcionando rápido com o announce ligado e um bocado de gente já 
conectada.  :)

Mas não desisti ainda. Vou procurar mais sobre isso e num futuro migrar 
para o nosso querido FreeBSD.
  To pensando como que vou diminuir esse número de conexões srrsrsrs

>
> Vamos aos fatos que vc tem que observar:
>
> - É de dominio publico que o innodb para inserts funciona melhor que o
> myisam, isso é facil de mudar (pra quem sabe, pelo jeito teu phpman
> nao sabe, eheh tu ta lascado!)

É lá é tudo myisam mesmo  :(  também li que innodb seria bem melhor de 
usar com relação à performance da gente.

> - Entao adotar o innodb faria muito diferenca, pois o tuning dele é
> mais consistente para concorrencia, threads e justamente alto IO.
> - Voce usou as opcoes de otimizacao no make.conf na hora que instalou
> o apache, php, mysql ? tipo:

Usei os ACCEPT_FILTER_HTTP, ACCEPT_FILTER_DATA e ACCEPT_FILTER_DNS no 
kernel e o mysql compilei com o BUILD_OPTIMIZED=yes e habilitei o apache 
no rc.conf pra usar a optimização mas confesso que não mexi no make.conf.

>
> CFLAGS= -O2 -pipe -funroll-loops -ffast-math
> COPTFLAGS= -O2 -pipe -funroll-loops -ffast-math

ahahah esses aí em cima me lembram a época do Gentoo Linux ahahahah eu 
costuma ter umas instabilidades com esse -funroll-loops. Como que tá isso?
> WITHOUT_X11=yes
> NO_X=yes

Esses 2 aí em cima, sempre ahahahahha nada de X no server.  :)

> - O myisam tem opcoes que podem ajudar, como o tamanho do cache para
> criar indices(afeta o insert), mas ele nao é para alta concorrencia(
> monte de desocupado fazendo insert ao mesmo tempo, ehe )
>
> - Se (essa joça) funciona no linSUX, numa maquina inferior, e agora no
> bsd esta mais lento ou com mais load acusando no sistema, algo esta
> errado(quem nao sabe ne), temos que considerar:
>   a) o mesmo numero de usuarios esta acesando o sistema agora ? ou tem
> mais do que na epoca do linux ?

Mesma coisa. O pessoal voltou agora aliviado ahahah. Eles adoram muito o 
manicomio-share.com e o bj-share até agora não volto.
Na época ajudei eles também mas nunca mais vi o responsável do bj-share 
online.

>   b) alguma mudanca de comportamente do sistema foi feita ? ativou
> algum recurso que nao usava antes ?

Nadinha. Usei a mesma coisa. rrsrsr

>
>   Se A e B nao indicam alguma mudanca de comportamento ou de acessos, é
> obvio que o problema esta na configuracao da infra estrutura, php,
> mysql ( o apache nao influencia muito )

Pra você ter uma idéia. Uma consulta de um torrent no FreeBSD tava 
demorando mais de 10 segundos pra me retornar a resposta e no Linux uns 
3 a 4 segundos.

> Imagino, tenho quase certeza que a instalacao do php/mysql no linux
> via o APT da vida, coloca tudo ja otimizado pra funcionar o melhor
> possivel no linux, como ja comentei.

Também pode ser. Mas a diferença tá muito gritante. Tem esse lance das 
4000 conexões que os caras do mysql falaram que no Linux é tranquilo por 
causa das threads como ele trabalha.

>
> No bsd, vc quem que instalar tudo via ports fazendo na mao os tunings
> necessarios, mas no final fica mais rapido que no linux, nao sou eu
> que digo, varios benchmarks,
> principalmente de mysql mostram isso.

Concordo que deveria mesmo ficar. Mas algo realmente não bateu, seja por 
falta de configuração minha, seja por alguma limitação no mysql dentro 
do FreeBSD.

>
> - Como nao temos dominio sobre o comportamento exato do sistema, pois
> NAO FOI FEITO por nos, nem pelo teu phpman, vamos focar na
> infra-estrutura..
> Me fale como instalou o conjunto php mysql apache. Pode ter algum xabu
> ai com o php/mysql
>
> Qual o numero de registros nas tabelas: USERS, TORRENTS E PEERS ?
users: 98,354
torrents: 98,980
peers: 404,651

>
> Voce esta usando ufs com soft updates ? ou o tal zfs ? (nunca usei
> zfs, pode ter algum xabu na config dele)

Tava usando ZFS com umas optimizações sugeridas no wiki.

> O myisam requer mais IO durantes os inserts que o innodb( eu acredito
> ) entao isso pode estar influenciando.
>
> TEM O TAL PARTICIONAMENTO do mysql, que pode ser feito, o que vai
> melhorar os inserts, pois o tamanho do indice fica
> menor, mas isso se justifica se voce tiver milhoes de registros.

Entendi. É esse eu nunca fiz mesmo.

>
> http://dev.mysql.com/doc/refman/5.1/en/partitioning-overview.html
> http://tech.bluesmoon.info/2009/09/scaling-writes-in-mysql.html
>
> Enfim, o que posso dizer é que pro numero de select/inserts por hora
> que os graficos indicam, é nada pra maquina que voce citou,
> nem cocegas deveria fazer, ou tem algo muito mal na instalacao(algum
> bug talvez) ou o teu phpman ativou algo agora que nao estava
> ativado antes la no linux.

Tava sem o announce. A coisa fica feia mesmo é com ele ligado. Mas mesmo 
sem ele eu achei muito lenta a consulta e quando colocamos no Debian as 
consultas voaram, sem alteração nenhuma no código.  :(

>
> Perguntei antes se o anounce é chamado pelo proprio site quando vc
> clica num link por exemplo, para se fazer um teste,
> apenas voce clicar no lugar que chama o anounce(e que esta
> travando/demorando para o mundo externo) para ver se com um evento
> fica lento ou aparece no top, se uma chamada do anounce esta
> demorando, ja mostra que é problema de infra ou de estrutura logica
> da aplicacao, agora se a lentidao e o load so aparecem quando tem
> muito acesso... aí temos que voltar ao que estava discutindo antes.
>
> Entao, voce consegue fazer esse tipo de teste ?Como ele ativa/desativa
> esse anounce ? bota um exit; no inicio dele ?
> achei muito ruim o codigo desse sistema... é muito antigo, fala php 4
> e usava register globals on....
> nao sei se a logica do cara esta correta para high load...
>
> Cria um jail ai, pra gente instalar e fazer uns testes... eu te mando
> um php que fica em loop dando inserts e medindo o tempo,
> podemos simular a mesma estrutura que o anunce afeta, aí fica mais
> facil achar onde esta o problema.

Vamos fazer sim pra frente vamos pegar outro servidor pra gente colocar 
o FreeBSD e testar com mais calma. Ainda quero ver o site nele. rsrsrs
Aí se quiser ajudar será bem vindo.  :)

>
> Num hardware desses é piada... tinha quer estar com 90% idle.....

Pois é. rsrsrs




Mais detalhes sobre a lista de discussão freebsd