Como concluiremos que há vazamentos de memória em um processo sem qualquer suporte de ferramentas de detecção de vazamento de memória como o valgrind?

0

Se o valor RSS do processo (obtido do comando top ou ps) aumentar rapidamente, ele pode ser tratado como vazamento de memória. Suponha que haja menos provisão para modificar o código e nenhum suporte adequado para instalar novos utilitários para rastrear o uso da memória.

Como é um aplicativo proprietário, não posso fornecer o código aqui. Eu reduzi a questão. Cada conexão openSSL aberta e fechada entre o daemon cliente e servidor estava introduzindo alguns vazamentos de memória. O daemon do servidor é um servidor típico que continua aguardando uma conexão, uma vez que a conexão é aceita, ele cria um encadeamento para manipular a solicitação do cliente. openSSL1.0.1 é a versão. De acordo com o link: link

A limpeza a seguir foi adicionada ao destruidor da classe do servidor, pois estou interessado no lado do servidor.

void ServerClass::doCleanUp()
{
    CRYPTO_cleanup_all_ex_data();
    ERR_free_strings();
    ERR_remove_state(0);
    ERR_remove_thread_state(NULL);
    CRYPTO_set_locking_callback(NULL);
    CRYPTO_set_id_callback(NULL);
}

Depois de realizar o teste de abertura e fechamento da conexão para diferentes iterações, há alguma diferença no valor de RSS, ou seja, (RSS_value_after_test_completion - RSS_value_at_startup) é positivo. Então, essa diferença positiva pode ser tratada como vazamentos de memória? Novamente, de acordo com o link stackoverflow, há o conceito de limpeza em nível de aplicativo e limpeza em nível de encadeamento. Na minha solução anterior eu tinha usado EVP_cleanup (), ele criou problemas em outros testcases, então o mesmo foi revertido. Não consigo realizar atividades relacionadas a Unload of DH param já que o servidor deve estar sempre ativo. Estou faltando alguma coisa? Mais orientações serão apreciadas.

Algumas observações: Observação 1: Quando executo testes de abertura e fechamento para 5, 10 e 30 iterações, observei que, quando o valor RSS do processo atinge algum valor (37,7 MB), ele nunca aumenta desse valor. NOTA: - As ordens de iteração de teste podem não ser as mesmas mencionadas.
Observação 2: Com uma iteração de teste de abertura e fechamento, pude ver o valor do RSS aumentar em torno de 7 MB. Observação 3: A pessoa que está testando está realizando o teste para uma iteração específica, digamos 100, portanto, há sempre uma diferença positiva para o valor de RSS e a afirmação de que há vazamento.

    
por Nihar Ranjan 08.09.2016 / 11:27

1 resposta

0

Não necessariamente:

  • seu aplicativo pode estar mantendo um banco de dados na memória que analisa e exclui periodicamente itens obsoletos
  • o aplicativo pode (por exemplo, Java) executar periodicamente a coleta de lixo.

Mesmo que fique sem memória, pode estar simplesmente configurado incorretamente (não é possível acessar o estado de revisão / limpeza periódica).

    
por 08.09.2016 / 21:51