sexta-feira, 15 de março de 2013

MySQL, Amazon Web Services (AWS) EC2 e Out of Memory (OOM)

Tenho um server aws, e nos últimos dias, estava com problema no mysql, direto quando a maquina chegava a 100% ele caia..

Como resolver esse problema, então? 

No meu caso, resolvi adicionando uma partição de SWAP à minha instância. Verifiquei que instâncias no AWS em princípio não possuem uma partição de SWAP, e, em casos onde a instância possui pouca memória, isso pode ser primordial para o bom funcionamento do sistema. 

O processo é simples e vou exemplificar como pode ser executado em duas etapas, a primeira no console do AWS e a segunda em um shell para a instância: 

1. Abra o Console AWS (http://console.aws.amazon.com) e vá para: EC2 → Volumes 

2. Clique em: "Create Volume". Selecione o tipo (Standard), o tamanho e a zona; 

3. Clique com o botão direito em cima do volume e selecione "Attach Volume", para associá-lo à instância que está rodando; 

4. Abra um shell para a sua instância: 

$ ssh -i <arq.pem> <usuario>@<IP_da_instancia> 

Obs.: Vamos exemplificar utilizando /dev/xvdf, para o novo volume anexado. 

5. Execute o fdisk

$ sudo fdisk /dev/xvdf 

E utilize a sequência:

1. n     Cria uma nova partição;
2. p     Primária;
3. Enter    Seleciona o número 1;
4. Enter    Seleciona o primeiro setor;
5. Enter    Seleciona o último setor;
6. t     Para selecionar o tipo de partição;
7. 82     Linux swap;
8. w     Salva e sai.


Depois ative a SWAP: 

$ sudo mkswap /dev/xvdf1
$ sudo swapon /dev/xvdf1
 

Pronto, criamos um novo volume, anexamos à instância rodando, particionamos como SWAP e o ativamos. 

Mas existem outras maneiras de resolver o problema, como: 

1. Ajustando adequadamente as configurações e buffers do MySQL. Ex.: key_buffer_size, innodb_buffer_pool; 

2. Ajustando o OOM score do seu sistema, por exemplo: 

# cat /proc/$(pidof mysqld)/oom_score_adj
# echo '-20' > /proc/$(pidof mysqld)/oom_score_adj
# cat /proc/$(pidof mysqld)/oom_score
 

O range do OOM Score vai de -1000 a 1000 (ou -17 até 15 em sistemas mais antigos). Lembrando que, utilizando o valor mínimo, não desabilita o OOM Score, somente reduz suas chances de ser convidado a se retirar da memória. 


mais informaçoes...

http://www.dbasquare.com/2012/05/31/mysql-oom-killer-and-everything-related/


Vitor Yudi Hansen