quarta-feira, 21 de maio de 2014

AWS Amazon - Servidor com Load

VM na Amazon com load alto, o que fazer?


Atenção: este procedimento só é aconselhado no caso do servidor não querer voltar sozinho.   

Modelo de exemplo:
- 1 servidor de aplicação (APACHE)
- 1 servidor de banco (MySQL)

Ferramentas utilizadas:
- 1 servidor NAGIOS (Monitoramento).

Verificamos um alarme em nossa ferramenta : 
 SERVICE ALERT: Servidor WEB - CRITICAL HARD ; 3 ;CRITICAL - load average: 21.19, 9.51, 4.02

É importante verificar no servidor de aplicação, se tem algo impedindo de executar os processos.

top - 20:09:09 up 14 days,  7:08,  3 users,  load average: 21.19, 9.51, 4.02
Tasks: 135 total,   1 running, 134 sleeping,   0 stopped,   0 zombie
Cpu(s):  5.7%us,  2.2%sy,  0.0%ni, 91.4%id,  0.7%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  15408168k total, 11613132k used,  3795036k free,   484212k buffers
Swap:        0k total,        0k used,        0k free,  7276380k cached


PID    USER     PR  NI VIRT  RES  SHR S %CPU %MEM    TIME+ COMMAND 

2309 daemon    20   0   986m  78m  44m S      0.0       0.5       0:24.40 /usr/local/apache/bin/httpd -k start
2451 daemon    20   0   986m  78m  44m S      0.0       0.5       0:26.78 /usr/local/apache/bin/httpd -k start

1681 daemon    20   0   988m  77m  41m S      0.0       0.5       0:41.60 /usr/local/apache/bin/httpd -k start 
698   daemon    20   0   987m  76m  41m S     16.9      0.5       1:31.80 /usr/local/apache/bin/httpd -k start 
2192 daemon    20   0   991m  76m  37m S      0.0       0.5       0:34.91 /usr/local/apache/bin/httpd -k start 
2605 daemon    20   0   987m  74m  39m S      0.0       0.5       5:11.76 /usr/local/apache/bin/httpd -k start 
2449 daemon    20   0   985m  73m  42m S      0.0       0.5       0:23.61 /usr/local/apache/bin/httpd -k start

OBS.: 
  • O PID 698 tem um TIME maior que a maioria dos outros processos, porém, tem consumo de CPU e de memória, podemos concluir que é um processo que esta em execução.
  • O PID 2605 tem um TIME maior ainda que todos , porém, não apresenta consumo de CPU e nem de memória, podemos concluir que é um processo candidato a ser o nosso problema.
não havia também um cron rodando no momento do load .

Agora olhamos o servidor de banco de dados, vejamos se alguma query esta parada em sleep por muito tempo ou se existe alguma tabela em lock.

[root@root|~]#  /usr/local/mysql/bin/mysql -uroot -p -e'show processlist;'
+----------------+------------+-------------------------------------------+----------+----------------------+------------+------------------------------------------------------+------------------+
| Id              | User     | Host                                    | db       | Command     | Time     | State                                              | Info            |
+----------------+------------+-------------------------------------------+----------+----------------------+------------+-------------------------------------------------------+------------------+
| 14938960 | slave     | 192.168.0.1                        | NULL | Binlog Dump | 982667 | Master (...)                                      | NULL        |
| 17943874 | user      | 192.168.0.2                        | teste   | Sleep           |       370 |                                                       | NULL        |
| 17944307 | user      | 192.168.0.2                        | teste   | Sleep           |     1426 |                                                       | NULL        |
| 17944562 | user      | 192.168.0.2                        | teste   | Sleep           |     1396 |                                                       | NULL        |
| 17953902 | user      | 192.168.0.2                        | teste   | Sleep           |           2 |                                                       | NULL        |
| 17953913 | user      | 192.168.0.2                        | teste   | Sleep           |           0 |                                                       | NULL        |
| 17953914 | root       | localhost                             | NULL  | Query           |           0 | NULL                                    | show processlist |
+---------------+-------------+-------------------------------------------+-----------+---------------------+------------+-------------------------------------------------------+------------------+



Com esse cenário podemos concluir que os processos mysql (17944562, 17944307 e 17943874) estão congestionando a fila de processos e não estão processando nada (Campo State vazio) .

Resolução: 
- acesse o mysql : /usr/local/mysql/bin/mysql -uroot -p
- dê o comando : mysql> show processlist;
- dê kill nos processos parados : kill 17944307;

Você verá que o processo httpd que estava ligado ao processo mysql que foi morto, morrerá também, aliviando assim a carga.

Nenhum comentário:

Postar um comentário

Comente ai!!!!