como otimizar servidor linux pequeno?

1

Eu tenho um pequeno servidor Ubuntu com 512MB de ram e vários sites php / mysql (~ 20) rodando nele. Ele está rodando há 2 anos sem um único problema. Mas acho que o momento para alguma otimização acabou de chegar.

Os sites hospedados nesse servidor têm tráfego muito baixo, mas vejo alguns problemas de CPU agora que começaram a receber mais visitas.

A primeira coisa que estou tentando fazer é identificar os problemas, então tenho andado por aí com várias ferramentas de linha de comando, como top htop apachetop, etc, e workbench para monitorar MySQl. Com essas ferramentas é meio difícil sei o que está acontecendo exatamente. Por exemplo, criei um daemons PHP que está sendo executado em segundo plano e a cada 10 segundos armazena no banco de dados o uso da CPU. Se a CPU for maior que 60%, ela armazenará a saída do apachetop. Isso não foi especialmente útil, pois muitos dos registros são OPTIONS * HTTP / 1.0 . Além disso, parece que é uma lista das últimas solicitações, não da solicitação atual.

Segundos, quando eu tento monitorar o que está acontecendo usando o htop, sempre vejo 15 registros como:

6905 mysql     20   0  462M  110M  5220 S  0.0 21.6  5:29.79 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock

e outro ~ 15 como:

23382 www-data  20   0  259M 27384  4820 S  1.3  5.2  0:01.00 /usr/sbin/apache2 -k start

aqui está uma captura de tela:

Não tenho certeza se essa quantidade de processos deve estar aberta o tempo todo ou isso é algo que eu posso otimizar. Eu posso atualizar este servidor agora, eu só quero otimizá-lo tanto quanto possível antes de fazê-lo.

Além disso, liguei o log para consultas lentas, as únicas consultas são todas as consultas que são executadas quando a CPU do servidor está acima de 90%. Isso apenas confirma que o php / mysql que estou usando (custom) não é muito pesado. Posso dizer que o site com mais tráfego tem 300 visitantes únicos e 1200 visualizações de páginas por dia. Todos os outros sites têm tráfego muito menor.

1) Estou procurando sugestões de como monitorar esse servidor com eficiência.

2) Eu preciso de sugestões para MySQl e PHP. Por exemplo, quanta memória devo atribuir a eles ou quais opções devo ligar / desligar.

Obrigado!

aqui está um link para uma captura de tela do htop: link

    
por Sam Cogan 21.01.2011 / 17:09

4 respostas

1

Como se pode supor de algumas das minhas postagens anteriores, eu corro para todo lado. Baixe / instale o rpm a partir do sourcefore e '/etc/init.d/collectl start' e pronto. Ele coletará mais de duas centenas de métricas de desempenho a cada 10 segundos a < 0,1% da CPU. Ele também tira um instantâneo dos dados do processo a cada minuto, já que é uma operação de maior peso. Você pode então reproduzir os dados coletados em uma variedade de formatos ou até plotá-los com uma ferramenta baseada na web chamada colplot, que faz parte do pacote collectl-utils.

Ver fotos breves e / ou incompletas do que o sistema está fazendo não vai te levar até lá. Você precisa de uma imagem de longo prazo de dados detalhados que possa ser detalhada para ver o que realmente está acontecendo.

-mark

    
por 28.01.2011 / 13:20
0

Como ajustar um servidor Linux, executar o Apache, PHP e MySQL preencheria pelo menos quatro grandes livros - e não há solução mágica.

No entanto, na minha experiência, a maioria dos problemas de desempenho em pilhas LAMP são consultas de banco de dados mal escritas. Você descartou isso como uma possível contribuição para o que você percebe como um problema de desempenho - eu recomendo que você volte e dê uma boa olhada nisso.

Depois de ter resolvido o banco de dados, as outras coisas a verificar são que você está compactando todos os html, javascript e css (mod_gzip) e o PHP gerado em HTML (buffer de saída). Certifique-se de que você tenha um cache opcode em execução (como o APC). E certifique-se de estar atendendo todo o seu conteúdo estático com informações de cache sensatas.

As métricas do sistema são boas para dizer como o desempenho de um sistema é restrito - NÃO é o que o desempenho realmente é. Comece a gravar% D nos seus logs do Apache e analise os resultados para descobrir como o seu sistema realmente está se saindo . Priorize os URLs com os totais mais altos para otimização.

Os detalhes que você forneceu do seu sistema são muito contextuais - supondo que você esteja configurado corretamente, eles sugerem que o uso da CPU é principalmente baixo para o mysql - mas se a configuração do servidor web está errado, então o oposto pode ser o caso.

Teria sido útil se você tivesse fornecido a configuração do apache (menos os comentários).

I turned on the log for slow queries, the only queries there are all queries that are executed when the server's CPU is over 90%

Parece que você definiu um limite muito alto. Tente definir o limite como 0 e escreva um analisador para remover os parâmetros das consultas para identificar quais realmente são lentos. Ou apenas encontre um já escrito .

    
por 21.01.2011 / 17:43
0

Provavelmente sua tabela está crescendo com o tempo e você está perdendo nos buffers do mysql. Tente descobrir se suas tabelas são do tipo MyISAM ou InnoDB e ajuste as configurações do buffer de acordo.

Se você não usa o InnoDB, desligue-o. O InnoDB tem o buffer configurado com innodb_buffer_pool_size e o MyISAM usa o key_buffer. Você pode encontrar os dois valores em variáveis mysqladmin.

À medida que as tabelas crescem, as mesmas consultas que anteriormente eram rápidas funcionam mais devagar e mais devagar.

A respeito de saber o que o computador faz? É difícil. Tente encontrar as horas exatas em que o sistema estava ocupado e verifique os crontabs do sistema e do usuário e os logs de acesso ao servidor da web.

    
por 21.01.2011 / 17:54
0

Você precisa de mais informações. O servidor está sempre lento? Ou apenas durante determinados períodos de tempo? Quais os períodos de tempo? Como é a caixa durante esses períodos?

Eu procuraria algo como Munin . É um aplicativo de monitoramento de sistema muito simples que coleta dados e os apresenta como gráficos. Eles têm plugins para Apache e MySQL para rastrear acessos, processos e volume.

A melhor coisa sobre Munin é que você obtém muita informação para quase nenhum trabalho. Instalação e configuração é um trabalho de 5 minutos se você fizer manualmente, e um trabalho de 30 segundos se você estiver usando Debian / Ubuntu. A única coisa que você precisa fazer depois de soltá-lo é adicionar uma entrada para o host na configuração e verificar se os plug-ins desejados estão ativados.

Munin, ou algo similar, ajudará a fornecer algumas linhas de base atuais para o seu sistema. Isso será muito útil à medida que você começar a fazer alterações, ajustes e ajustes nos aplicativos, pois terá um feedback melhor sobre o que está funcionando. Então, você pode começar a pesquisar nos lugares mais específicos e melhorar o desempenho do MySQL, o desempenho do Apache e qualquer outra coisa que esteja sendo executada na caixa.

    
por 21.01.2011 / 17:56