Precisa melhorar a configuração do apache e do mysql. Configuração atual está falhando servidor devido a RAM maxing out?

1

Ok, gerimos um carrinho de compras de autopeças em crescimento. Nosso servidor é executado lento e está sempre batendo por isso pedimos ao nosso web host para nos ajudar. Eles nos enviaram esse relatório, mas eu preciso de alguns conselhos sobre como processá-lo.

Nosso plano agora é pegar o banco de dados MySQL e hospedá-lo na AWS, mas eu preciso saber como avaliar qual instância de tamanho precisamos e qual serviço funcionaria melhor.

Também preciso de saber se há algum ajuste no apache que melhore o desempenho.

Aqui está a análise que o host da Web nos envia

A maneira como essas questões entram em ação é:

1) A pegada de RAM muito grande do seu aplicativo da Web processa mais de 512M, além do ajuste inadequado do Apache, que permite que esses processos de aplicativos da Web consumam mais RAM do que a disponível no servidor.

2) O serviço MySQL no seu servidor, como o Apache, é ajustado para alocar muito mais memória RAM do que a disponível no seu servidor. Isso torna o serviço do MySQL instável, portanto, exigirá reinicializações para corrigir problemas que não ocorreriam se fossem adequadamente ajustados para não usar mais RAM do que o que está instalado.

APACHE

A configuração Apache MaxClients do seu servidor é a padrão == 256

Seu servidor tem 32232 MB de memória

O maior processo de aplicativo da web Apache está usando 572.73 MB de memória

O menor processo de aplicativo da web Apache está usando 35.02 MB de memória

O processo médio do aplicativo da web Apache está usando 94,93 MB de memória

Indo pelo processo médio do Apache, o Apache pode potencialmente usar 24302,09 MB de RAM (75,40% da RAM disponível)

Indo pelo maior processo do Apache, o Apache pode potencialmente usar 146618,89 MB de RAM (454,89% da RAM disponível)

A configuração Apache MaxClients do seu servidor não deve ser maior que 50 se você estivesse alocando apenas 100% da RAM do seu servidor para os processos do aplicativo da web Apache.

Máximo de uso de memória potencial: 146618,88 MB (454,89% de RAM disponível)

Porcentagem de RAM alocada para o Apache 454,89%

OBSERVAÇÃO: essa análise não leva em consideração nenhum outro processo como o serviço de banco de dados MySQL em execução no servidor que também requer recursos de RAM significativos para ser executado com eficiência, atualmente com um mínimo de 1,2 GB de RAM.

MySQL

-------- Performance Metrics -------------------------------------------------
[--] Up for: 14h 11m 51s (9M q [195.147 qps], 41K conn, TX: 22B, RX: 1B)
[--] Reads / Writes: 59% / 41%
[--] Total buffers: 1.6G global + 5.0G per thread (151 max threads)
[!!] Maximum possible memory usage: 756.7G (2403% of installed RAM)

[OK] Slow queries: 0% (2K/9M)
[OK] Highest usage of available connections: 23% (35/151)
[OK] Key buffer size / total MyISAM indexes: 1.0G/2.2G
[OK] Key buffer hit rate: 100.0% (9B cached / 1M reads)
[OK] Query cache efficiency: 90.4% (8M cached / 9M selects)
[!!] Query cache prunes per day: 725309
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 147K sorts)
[!!] Joins performed without indexes: 1544
[!!] Temporary tables created on disk: 47% (96K on disk / 203K total)
[OK] Thread cache hit rate: 99% (59 created / 41K connections)
[!!] Table cache hit rate: 5% (512 open / 10K opened)
[OK] Open file limit used: 1% (910/65K)
[OK] Table locks acquired immediately: 99% (2M immediate / 2M locks)
[!!] Connections aborted: 6%

Mitigação sugerida do MySQL:

Execute OPTIMIZE TABLE para desfragmentar tabelas para melhor desempenho

Reduza sua área de cobertura geral de memória do MySQL para estabilidade do sistema

Ajuste suas consultas de associação para sempre utilizar índices

O tamanho da tabela temporária já é grande - reduza o tamanho do conjunto de resultados

Reduza suas consultas SELECT DISTINCT sem cláusulas LIMIT

Seus aplicativos não estão fechando as conexões do MySQL corretamente para que seus desenvolvedores corrijam o código para que as conexões MySQL sejam explicitamente fechadas quando os resultados da consulta forem retornados.

    
por Anthony Accetturo III 03.04.2015 / 04:57

2 respostas

2

Se você estiver hospedando o MySQL e o Apache no mesmo servidor, você verá um ganho de desempenho simplesmente movendo-os para máquinas separadas. O MySQL gosta de usar RAM para armazenar dados em cache, mas você não verá uma grande quantidade de melhorias se estiver fazendo uma tonelada de gravações (o que não parece que você esteja).

Outra coisa que você pode considerar é obter um balanceador de carga e girar dois servidores da web por trás dele. Isso permitiria que você conseguisse instâncias menores e espalhasse o risco. O AWS tem várias zonas dentro de uma determinada zona de disponibilidade (como 1a, 1b, etc.) e você pode ter seu banco de dados em 1a e uma cópia de banco de dados mutli -az em 1b, com um servidor da Web também. Se 1a cair, você faz o failover automaticamente para 1b. O balanceador de carga garantiria que você também dividisse o tráfego entre os servidores, o que significa menos chances de sobrecarga.

Por tudo isso, sugiro que você tente o seguinte

  • Execute o mysqltuner e veja se você pode ajustar seu banco de dados primeiro. Você precisará dessas informações para ajudar a ajustar sua instância do RDS mais tarde
  • Coloque seu banco de dados em m3.medium ou m3.large. Lembre-se, você sempre pode alterar o tipo de instância mais tarde se achar que está sobrecarregado
  • Use duas instâncias do EC2 m3.medium para seus servidores da web. Carga balanceada, aposto que eles têm um desempenho melhor do que o seu servidor monolítico faz agora. Considere o uso de um sistema de configuração do servidor como Opsworks para facilitar a configuração. Se você achar que seus servidores estão sobrecarregados, você sempre poderá usar esse script para ativar novos servidores sob demanda e compartilhar a carga.
por 03.04.2015 / 19:11
0

Qual modelo de processamento do apache você está usando? Ou parece que é pré-forma. A pré-forma agora é datada e há outro mpm para o Apache com menor consumo de memória. Nem todos os aplicativos os suportam, mas a maioria deve pelo menos trabalhar com o Apache amp me worker. Isso deve permitir manter, e talvez aumentar, o número de clientes simultâneos usando menos memória RAM.

    
por 03.04.2015 / 08:53