Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal,
Peguei um sistema esses dias, um leilão de centavos em PHP MySql, está funcionando e hospedado em um servidor dedicado com 4Gb de memória RAM, processador 4 cores, SO centOS e tudo mais.
Durante o pico do site, ou seja com pouco mais de 200 usuários online, o sistema fica super lento e já chegou a cair. No servidor posso ver que não há consumo elevado de memória e nem de banda.
O sistema funciona mais ou menos assim:
Um javascript envia uma solicitação a cada 500ms para um arquivo e esse retorna em 210ms a resposta.
Esse arquivo é responsável por atualizar o tempo do leilão (os segundos) e imprimir na tela. Ele também recebe o clique do usuário e guarda no banco de dados.
O sistema não possui um processo CRON, e sim uma procedure no banco de dados para atualizar o tempo.
Percebi que no código não foi utilizado Orientação a Objetos. Os selects estão certinhos (com inner join, left, right e etc).
O servidor está todo configurado para o melhor desempenho possivel no banco de dados.
E então, gostaria da ajuda de vocês. O que poderia esta deixando esse sistema lento?
Alterar o paradigma para Orientação a Objetos pode melhorar no desempenho?
Se quizerem posso deixar aqui o código do arquivo que recebe as requisições.
Agradeço muito a ajuda de todos.
Olá Vinicius, Obrigado pela resposta.
Da uma olhada nesse gráfico. É o estado atual do servidor
/applications/core/interface/imageproxy/imageproxy.php?img=http://cliquei9.com/bwgraph.gif.png&key=87e856a011b6fee0edc88642adee92e0bf19b83cb55ac0f2879dc7d6d4f239af" alt="bwgraph.gif.png" />
Mas quanto a esse problema da instabilidade, o que poderia ser feito?
Abraço
eu não sei ao certo o que pode ser feito então vai alguns procedimentos que eu faria para tentar a melhoria, o primeiro passo já é melhorar a banda.
não sei com quantos dados você esta trabalhando mais se for muito dado começar a trabalhar com mirror nas tabelas que melhora tempo de execução, uma revisão de como o código é estruturado é bem vinda o POO apesar de ser apenas um modo de desenvolver por usa-lo você acaba escrevendo de forma correta o que ganha tempo.
qual tipo de conexão a DB você trabalha?
seu computador tem uma boa configuração e da pra trabalhar legal com ele, apesar de 200 usuários simultaneo vai comer muita RAM o que pode causar problemas..
um parceiro do meu site de compra coletivas tem 3.800 acessos e ele simplesmente tem 8 serves com boas configurações, pra que tudo isso? realmente não sei direito o que fizeram acho que dava para diminuir isso mais a questão é olha como se gasta muito com server.
um dado muito importante é saber qual sistema operacional que você esta utilizando, o Linux pode ganhar até 6% de performance em relação ao windows
Então Vinicius,
Eu estou utilizando Sistema operacionao Linux centOS 5.8 - 32 Bit.
A conexão com o banco de dados ainda é a que veio no sistema que na minha opinião pode ser um dos problemas:
include_once("config.inc.php");
include_once("language/english.php");
$db=mysql_connect($DBSERVER, $USERNAME, $PASSWORD);
if (!$db) {die('Não foi possivel conectar: ' . mysql_error());}
mysql_select_db($DATABASENAME,$db);
Quanto a mirror que você citou, o que seria?
Outra coisa, a banda é de 100mbs. o maior pico consumiu 18...
por exemplo você tenha cadastrado mais de 1000 produtos porém apenas 30 estão ativos...
seu banco de dados sabe que ele só vai pegar esses 30, mais como será que ele sabe que não é para pegar os outros?
bom ele lê tudo, ai acontece que ele le 1000 registros praticamente atoa.
a técnica do mirror vai gerar uma tabela nova exatamente do mesmo modo que é a sua atual mais o diferencial dela é que toda oferta que você ativar por padrão ela vai entrar nessa outra tabela gerada também, ai vem o detalhe você não vai mais consultar sua tabela principal mais sim o mirror(espelho da sua tabela) que vai conter apenas ofertas ativas, ou seja, ele não vai ler tudo para chegar a conclusão de que 30 são ativas o sistema si vai fazer isso por trás de tudo.
a banda esta boa, então o problema deve ser estrutural mesmo.
abre o site no chrome da F12 clica em Network e atualiza sua página, você terá o tempo que esta carregando os arquivos e com isso pode focar mais no problema.
Então, verifiquei o uso de memória RAM, descobri que o mysql esta consumindo com 30 usuarios online 1.4gb de RAM.
e no total só me sobram 500megas de memoria.
Vou solicitar mais 8 ou 16Gb essa semana, meu medo é se o mysql vai continuar utilizando muita memória ou seja, se vai engolir a RAM mesmo que tenha 16 ou 32Gb...
O que me resta é testar. Na segunda-feira já tenho uma posição.
Nos falamos.
1.4 gb.. tente fazer a sugestão de espelho das tabelas primeiramente..
isso poderá lhe poupar $$$ com upgrades
Outra sugestão:
Veja se você não consegue arrumar um sistema de melhor qualidade. Não dá pra julgar por apenas um pedaço de código, é claro. Mas por isso aí dá para se ter uma ideia de que o sistema parece defasado, ainda está usando a extensão mysql, a mais antiga... o melhor seria usar MySQLi ou PDO. Será que as conexões com o banco de dados estão sendo corretamente gerenciadas e a memória está sendo limpa usando mysql_free_result?
Então. Eu fiz o up e estabilizou.
Como eu pensei desde o inicio. eu coloquei o mysql_free_result em quase tudo.
mas como esta montado todo e completamente com "orientação a gambiarras", fiquei meio que com preguiça de mexer em tudo.
Senti uma leve melhora com o free_result.
Vou mexer no código, deixá-lo mais parecido com sistema profissional.
Eu agradeço a resposta de todos.
>
Um javascript envia uma solicitação a cada 500ms para um arquivo e esse retorna em 210ms a resposta.
hum... eu creio que esse seja o problema.
Já ouviu falar de commet, ajax reverso, server push ?
Para um sistema assim, o mais indicado era ser escrito em Node.js
deve ser a banda, que é o acesso simultaneo a 1 link..
eu tenho quase certeza pois o seu site é centrado ao botão Dar Lance ou algo parecido.
deve acontecer que 20 pessoas cliquem no mesmo link isso pode gerar instabilidade no server.
de uma olhada na banda por favor