O documento descreve experimentos realizados para avaliar diferentes ações de rejuvenescimento de software, como reiniciar o computador, sistema operacional, processos e threads. Os resultados mostraram que o Linux teve melhores tempos para ações que envolvem o núcleo do sistema, enquanto o Windows foi melhor para ações internas à JVM. Reiniciar processos de forma graciosa evitou erros, mas aumentou levemente o tempo de resposta.
Experimentos de Rejuvenescimento de Software em Sistemas Operacionais
1. “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
2. ROTEIRO
• Ações de Rejuvenescimento de Software.
• Experimentos com geração de Carga de Trabalho.
2
3. 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
4. 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
8. 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
9. 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)
10. 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/S99Sist
ema
Computador é
desligado e
posteriormente
iniciado (cold
reboot)
11. 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
12. AÇÕES DE REJUVENESCIMENTO DE SOFTWARE
• Computer Reboot
• O Script executa uma classe Java que realiza o update no banco de dados.
12
13. 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
14. 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)
15. 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/S99Sist
ema
Computador é
desligado e
posteriormente
iniciado (cold
reboot)
16. 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
17. 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
18. 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
19. 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
20. 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
21. 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
22. 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
23. 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
24. EXPERIMENTOS COM GERAÇÃO DE CARGA DE
TRABALHO
• Experimento
• Comando Apache AB executado por H1;
24
25. 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
27. 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
28. 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
29. 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
30. 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
31. 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
32. 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