• Nenhum resultado encontrado

3.1 Monitorando os Efeitos de Envelhecimento Relacionados ao Vaza ­

3.1.3 Usando Indicadores de Envelhecimento de Aplicação

Para evitar equívoco nos valores obtidos com indicadores de sistema, os indica­ dores de aplicação são uma melhor alternativa para oferecer informação de um processo

individual da aplicação. Especialmente para detectar vazamentos de memória, (R. Matias

and P.J. Freitas Filho, 2006) propôs o uso do tamanhodo conjunto residente do processo (RSS)como indicador de envelhecimento. Este indicador permite monitorar a quantidade

de memóriafísica que um determinado processo de aplicação está usando. Monitorar este indicador é muito mais efetivo do que usar indicadores de sistema como memória física livre ou usada. Entretanto, para utilizá-lo o pesquisador deve saber qual processo deve ser monitorado. Emboraeste indicador de envelhecimento tenhasidousado e apresentado bons resultados em trabalhos anteriores (ex. (R. Matias, P. A. Barbetta, K. S. Trivedi

and P. J. F. Filho, Mar. 2010), (R. Matias and P. J. Freitas Filho, 2006), (J.C.T. Araujo,

R. Matos, P.R.M. Maciel, R. Matias, and I. Beicker, 2011), (A. Macedo, T.F. Borges and, R.Matias, 2010), (R. Matias, I. Beicker, B. Leitão, and P.R.M. Maciel, 2010), (R. Matias

and P. J. Freitas Filho, 2006)), observamos recentemente que este indicador também sofre de algumas desvantagens. Investigando os mecanismos de vários alocadores de memória

(T.B.Ferreira,R. Matias, A. Macedo and L.B. Araujo, 2011), aprendemos que vazamen­

tos de memória não aumentam imediatamente o tamanho do processo quando ocorrem.

É necessário um tempo de propagação dovazamentopara que estesejaobservado de fora

da heap do processo, uma vez que o tamanho do processo só aumenta quando uma nova área de memória é requisitadaao sistema operacional a fim de estender a heap saturada.

Sendo assim, neste intervalo de tempo de observação, não se pode detectar ocorrências

de vazamento de memória pelo monitoramento do tamanhodo conjunto residentedo pro­

cesso (RSS). Para ilustrar esteproblema,realizamos o experimento 3. Neste experimento,

executamos um programa que aloca inicialmente 1024 blocos de 1024 bytes (1 MB no total).

Após isso, são liberados 512 blocos e alocamos 512novos blocos de 1024 bytes, mas

agora vazando todos eles. A Figura 5 mostra o resultado do experimento 3. Observamos que o RSS do processo aumentou logo após a primeira seção de alocaçõesde memória. Isso

ocorre por que a heap inicial, criada pelo alocador de memória padrão (ptmallocv2 (T.B.

Ferreira, R. Matias, A. Macedo andL.B. Araujo,2011)), tem apenas 132 KB de tamanho,e requisitamos 1 MB de memória. Então, novasáreas de memória são adicionadas aoespaço

de endereçamento do processo, fazendo com que o tamanho do conjunto residente (RSS)

aumente.Em seguida, metade da memória alocada é liberada, eisto não altera o valor do RSS do processo.

Capítulo 3. Estudo Experimental 30

char *p[1024];

main(){

unsigned

long j=O,i=O,1=0;

RSS= 224 kB

for(i=0; i<1024;i++){

p[i]=malloc(1024);

if ( p[i]==NULL) exit(O);

for(l=0;l<1024;l++)

p[i][l]='*';

}

RSS= 1276 kB

for(i=0;i<512;i++) free(p|[i]);

RSS= 1276 kB

for(i=0;

i<512;i++){

p[0]=malloc(1024);

if

( p[O]==NULL) exit(O);

for(l=0;l<1024;l++) p[O][l]='*’;

}

RSS= 1276 kB

Figura 5 - Resultados doexperimento 3.

Este é um achado importante,dado que o senso comum é que logo após a liberação da memória alocada, essa porção de memória irá retornar ao sistema operacional. Isso

está acontecendo por que o alocador ptmallocv2 move os blocos liberados para as listas livres daheap de modo a mantê-los para reutilizaçãofutura (T.B. Ferreira, R. Matias, A. Macedo andL.B. Araujo,2011). Em seguida, forçamos o vazamento de 512 blocos de1024 bytes e o RSS do processo ainda continua o mesmo. Isto confirma, experimentalmente,

nossahipótese mencionada acima de que nem todo vazamentoé capturadoimediatamente

monitorando apenas o RSS.

Estes achados têm um efeito importante nos mecanismos de rejuvenescimento, dado que várias abordagens de rejuvenescimento esperam o indicador de envelhecimento monitorado(ex. RSS) chegaraum determinadolimiar (threshold ) para serem executadas. Nossos experimentos mostram que um monitoramento preciso devazamento de memória

deve ser realizado dentro da heap em vez defora,como temsido comumente implementado nos trabalhos anteriores. Não o fazendo, o acompanhamento do RSS pode não revelar precisamente a taxa correta de vazamento de memória, mas somente a taxa em que o processo está aumentando a sua área de heap. Note que semelhante aos resultados obtidos

Capítulo 3. Estudo Experimental 31 não deve ser sempre considerado como um sinal de vazamento de memória.Isso pode ser

simplesmente a demandada aplicação pormais memória daheap,e não uma consequência

devazamento de memória causado por defeitos do softwareouproblemas em seu projeto. No caso de aplicações que adotem opadrão de "conjunto de recursos", esta tendência de aumento é muito comum. Então, para verificar se o aumento do RSS do processo deve ser considerado como uma consequência de vazamentos de memória, propomos testar a aplicação em um ambiente controlado, onde é possível reduzir a quantidade de memória

física. Isso pode ser facilmente obtido tanto fisicamente quanto por meio de máquinas

virtuais. Se o processo continua a crescer por trás dos limites da memória física, isto

é, aumentando o tamanho da sua memória virtual, então isso deve ser considerado um

problema de vazamento de memória, seja voluntaria ou involuntária (ver Capítulo 3). Em ambos os casos o crescimento descontrolado do tamanho do processo irá sa­ turar os recursos do sistema. Na situação onde o crescimento do processo nãoé causado por vazamento de memória, mas simplesmente pela consequência de picos transitórios de

cargas de trabalho,otamanhodo processona memória virtualnão deve ser significativa­

mente maior do que o RSS, que é limitado à memória física disponível. Por esse motivo, consideramos que monitorar o RSS em combinação com o tamanho virtual do processo (VIRT)é uma melhor estratégia do que usar apenas o RSS. Note que o RSS representao tamanho das partes do processo residentes na memória física, e se a memória física dis­ ponível é limitada e o processocontinua a crescer por trás deste limite, o RSS nãopode

capturar o aumento deste tamanho.Assim,pode-se concluir que o acompanhamento dos tamanhoscombinados de RSSe VIRT oferece um indicador de envelhecimento muito mais preciso para a detecção de vazamento de memória.

32

4

Combinando Indicadores de Aplicação

Documentos relacionados