32
Experimentos envolvendo ações de Rejuvenescimento de SoftwareCarlos Eduardo Dantas AE2 - Programa de Pós Graduação em Computação Universidade Federal de Uberlândia, Brasil 1

Experimentos envolvendo ações de Rejuvenescimento de Software

Embed Size (px)

Citation preview

“Experimentos envolvendo ações de Rejuvenescimento

de Software”

Carlos Eduardo Dantas

AE2 - Programa de Pós Graduação em Computação

Universidade Federal de Uberlândia, Brasil

1

ROTEIRO

• Ações de Rejuvenescimento de Software.

• Experimentos com geração de Carga de Trabalho.

2

AÇÕES DE REJUVENESCIMENTO DE SOFTWARE

• Objetivos• Executar ações de Rejuvenescimento de Software: Computer Reboot, Os

Restart, Process Restart, Thread Restart e Component Restart;• Obter média e desvio padrão de 10 execuções;• Utilização de dois Sistemas Operacionais: Windows e Linux.

• Ambiente de Teste• Intel Core i7 4510u com 8gb de RAM;• Sistemas Operacionais: Linux Ubuntu 14.04 e Windows 8.1;• Não foi utilizada virtualização;• Banco de dados Mysql utilizado como serviço em ambos os Sistemas

Operacionais.

3

AÇÕES DE REJUVENESCIMENTO DE SOFTWARE

• Experimento• Sistema servidor de Socket SSL;

• Cada conexão recebida é armazenada no banco de dados;

• Utilização do Pool de Conexões C3P0;

• Sem necessidade de uma versão para cada Sistema Operacional

• Dois fatores de Envelhecimento de Software:• Fechamento de conexões Socket SSL;

• Conexões não fechadas com o banco de dados.

4

AÇÕES DE REJUVENESCIMENTO DE SOFTWARE

• Experimento

5

AÇÕES DE REJUVENESCIMENTO DE SOFTWARE

• Experimento

6

AÇÕES DE REJUVENESCIMENTO DE SOFTWARE

• Experimento

7

AÇÕES DE REJUVENESCIMENTO DE SOFTWARE

• Computer Reboot• Utilização do procedimento Cold Reboot;

• Estratégia Best Effort;

• Windows – Execução do comando shutdown /s, clicando em um botão do sistema;• Foram avaliadas outras opções, como gpedit;

• Linux – Script adicionado em /etc/rc0.d

8

AÇÕES DE REJUVENESCIMENTO DE SOFTWARE

• Computer Reboot• Windows

9

Usuário pressiona o botão de

desligar

Executa o comando

shutdown /s

Insere nova linha no banco de dados

com o tempo

Atualiza linha do banco de dados

com data fim

Executa Script ao iniciar o SO

(shell:startup)

Computador é desligado e

posteriormente iniciado (cold

reboot)

AÇÕES DE REJUVENESCIMENTO DE SOFTWARE

• Computer Reboot• Linux

10

Usuário solicita desligamento do

SO

Executa script em /etc/rc0.d/K99Sist

ema

Insere nova linha no banco de dados

com o tempo

Atualiza linha do banco de dados

com data fim

Executa Script ao iniciar o SO

/etc/rc2.d/S99Sistema

Computador é desligado e

posteriormente iniciado (cold

reboot)

AÇÕES DE REJUVENESCIMENTO DE SOFTWARE

• Computer Reboot• Independente do Sistema Operacional, no evento de desligar, é adicionado

um registro no banco de dados;

• Quando o computador é ligado:• Linux – Script adicionado em /etc/rc2.d;

• Windows – Script adicionado em Inicializar

shell:startup

11

AÇÕES DE REJUVENESCIMENTO DE SOFTWARE

• Computer Reboot• O Script executa uma classe Java que realiza o update no banco de dados.

12

AÇÕES DE REJUVENESCIMENTO DE SOFTWARE

• OS Restart• Windows

• Warm reboot;

• Comando shutdown /r ao clicar no botão;

• Linux• Fast Restart (kexec);

• Script adicionado em /etc/rc6.d

13

AÇÕES DE REJUVENESCIMENTO DE SOFTWARE

• Computer Reboot• Windows

14

Usuário pressiona o botão de

reiniciar

Executa o comando

shutdown /r

Insere nova linha no banco de dados

com o tempo

Atualiza linha do banco de dados

com data fim

Executa Script ao iniciar o SO

(shell:startup)

Computador é desligado e

posteriormente iniciado (cold

reboot)

AÇÕES DE REJUVENESCIMENTO DE SOFTWARE

• Computer Reboot• Linux

15

Usuário solicita reinício do SO

Executa script em /etc/rc6.d/K99Sist

ema

Insere nova linha no banco de dados

com o tempo

Atualiza linha do banco de dados

com data fim

Executa Script ao iniciar o SO

/etc/rc2.d/S99Sistema

Computador é desligado e

posteriormente iniciado (cold

reboot)

Novo Processo

AÇÕES DE REJUVENESCIMENTO DE SOFTWARE

• Process Restart• Windows/Linux

16

Insere nova linha no banco de dados

com o tempo

Executa o Script de reiniciar o

processo

Executa system.exit(0);

Atualiza linha do banco de dados

com data fim

AÇÕES DE REJUVENESCIMENTO DE SOFTWARE

• Thread Restart• Reinício da thread de acompanhamento das conexões;

• Thread executa a cada 5 segundos, atualizando a tabela de conexões recebidas.

17

Usuário pressiona o botão de

reiniciar thread

Executa o comando thread.interrupt()

lançando InterruptedException e

“matando” a thread

Insere nova linha no banco de dados

com o tempo

Cria uma nova thread e inicia a mesma.

Atualiza linha do banco de dados

com data fim

AÇÕES DE REJUVENESCIMENTO DE SOFTWARE

• Thread Restart

18

Insere nova linha no banco de dados

com o tempo

Atualiza linha do banco de dados

com data fim

AÇÕES DE REJUVENESCIMENTO DE SOFTWARE

• Component Restart• Reinício do pool de conexões;

• Cria um novo pool com os parâmetros mostrados na tela do sistema.

19

Usuário pressiona o botão de

reiniciar pool

O objeto javax.sql.DataSource

recebe uma nova instância com os parâmetros da tela

Insere nova linha no banco de dados

com o tempo

Atualiza linha do banco de dados

com data fim

AÇÕES DE REJUVENESCIMENTO DE SOFTWARE

• Component Restart• Uso do Design Pattern Singleton.

20

O objeto javax.sql.DataSource

recebe uma nova instância com os parâmetros da tela

Insere nova linha no banco de dados

com o tempo

AÇÕES DE REJUVENESCIMENTO DE SOFTWARE

• Resultados• Média e Desvio Padrão após 10 execuções de cada ação, em cada Sistema

Operacional.

21

Ação Windows Linux

Média(ms) Desvio Padrão(ms) Média(ms) Desvio Padrão(ms)

Computer Reboot 119400 6719.78 32500 1957.89

Os Restart 101100 6436.87 17500 1957.89

Process Restart 892.7 80.98 363.5 18.3

Thread Restart 12.5 9.68 34.8 30.61

Component Restart 70.2 48.45 81.7 21.77

AÇÕES DE REJUVENESCIMENTO DE SOFTWARE

• Análises• O Sistema Operacional Linux se sobressaiu em ações que envolvem atuação

imediata no núcleo do SO;• Baixo desvio padrão para ambos os Sistemas Operacionais.

• O Sistema Operacional Windows se sobressaiu em ações que envolvem ação interna da JVM (threads são a nível de usuário, ou seja, gerenciadas pela JVM);• Alto desvio padrão para ambos os Sistemas Operacionais.

• Conhecer os fatores de envelhecimento são essenciais para realizar reboot em uma granularidade mais fina, pois existe uma grande diferença de tempo entre algumas ações.

22

EXPERIMENTOS COM GERAÇÃO DE CARGA DE TRABALHO

• Objetivos• Conectar dois computadores H1 e H2 em rede, onde H1 gera uma carga de

trabalho para A2 usando o Software Apache AB, com duração de 5 minutos;• Forçar as ações de rejuvenescimento em H2: Computer Reboot, OS Restart,

Process Restart (stop + start) e Process Restart (graceful);• Medir o tempo de reinicialização, erros de reinicialização, tempo gasto por

requisição, requisições com sucesso e com falha.

• Ambiente de Teste• H1 - Intel Core i7 3770k com 8gb de RAM – Ubuntu 14.04; • H2 - Intel Core i7 4510u com 8gb de RAM – Ubuntu 14.04;• Ambos usando XAMPP versão 5.5.19;• Conectados pelo roteador Wireless Tp-link 54M G Adsl2+ Modem Router

23

EXPERIMENTOS COM GERAÇÃO DE CARGA DE TRABALHO

• Experimento• Comando Apache AB executado por H1;

24

EXPERIMENTOS COM GERAÇÃO DE CARGA DE TRABALHO

• Experimento• Indicadores monitorados por um Programa escrito em Java que executa em

H1, onde a cada 500 ms este tenta estabelecer uma conexão Socket no IP e Porta do Apache em H2.• Tempo de Reinicialização do Servidor Web

• Quantidade de Erros de Reinicialização.

25

EXPERIMENTOS COM GERAÇÃO DE CARGA DE TRABALHO

• Experimento

26

EXPERIMENTOS COM GERAÇÃO DE CARGA DE TRABALHO

• Experimento• Indicadores monitorados pelos resultados mostrados pelo Software Apache

AB executado em H1• Tempo gasto por Requisição

• Requisições Completadas com sucesso

• Requisições com falha

27

EXPERIMENTOS COM GERAÇÃO DE CARGA DE TRABALHO

• Experimento• Ações em H2:

• Computer Reboot – cold reboot;

• OS Restart – Fast Restart com kexec;

• Process Restart – Comando apachectl stop seguido de apachectl start;

• Process Restart – Comando apachectl graceful

28

EXPERIMENTOS COM GERAÇÃO DE CARGA DE TRABALHO

• Resultados• Média após 10 execuções de cada ação

29

Ação Server-Side – Reinicialização Client-Side - Requisições

Erros (qtde) Tempo (ms) Tempo gasto(ms) Sucesso(qtde) Falha(qtde)

Computer Reboot 33.2 23731 3,7 79020.6 4373.4

Os Restart 33.3 14836.5 3,42 88445 2189.6

Process Restart(stop start)

20.1 1686.8 2.7 118251.1 2413.6

Process Restart(graceful)

21 0 2.97 109142.1 0

EXPERIMENTOS COM GERAÇÃO DE CARGA DE TRABALHO

• Resultados• Desvio Padrão após 10 execuções de cada ação

30

Ação Server-Side – Reinicialização Client-Side - Requisições

Erros (qtde) Tempo (ms) Tempo gasto(ms) Sucesso(qtde) Falha(qtde)

Computer Reboot 14.93 2470.34 1.66 15938.83 1767.65

Os Restart 1.33 1471.06 0.26 1829.41 1903.2

Process Restart(stop start)

1.44 163.56 0.23 6440.19 900.24

Process Restart(graceful)

1.56 0 0.25 6938.12 0

EXPERIMENTOS COM GERAÇÃO DE CARGA DE TRABALHO

• Análises• Foi observada uma correlação entre os indicadores “tempo gasto por

requisição”, “quantidade de erros de reinicialização” e “quantidade de requisições com sucesso”;

• Em Computer Reboot, dois testes possuíram uma quantidade muito grande de erros de reinicialização e tempo gasto por requisição;

• Foi observado empiricamente que a quantidade de requisições que falharam é um valor que não possui nenhuma correlação com os demais indicadores;

• Foi observado que o comando Process Restart (graceful) evita conexões com erro, mas isso tem um leve custo no tempo de atendimento de cada requisição.

31

REFERÊNCIAS

[1] C.E. Carvalho Dantas, R. Matias. “Um estudo sobre os efeitos de Envelhecimento de Software na Linguagem Java”.

[2] [Online].Available: http://bugs.java.com/view_bug.do?bug_id=6745052

[3] [Online] Available: http://www.mchange.com/projects/c3p0/

[4] [Online] Available https://wiki.ubuntu.com/RapidReboot

32