socket descriptor leak encontrado na jdk
TRANSCRIPT
“Apresentação do problema Socket Descriptor
Leak encontrado na JDK”
Publicado em setembro de 2008
Disponível em: http://bugs.java.com/view_bug.do?bug_id=6745052
Apresentador: Carlos Eduardo Dantas
ROTEIRO
• Introdução.
• Socket Descriptor Leak na JDK.
• Reprodução do problema.
• Conclusão.
INTRODUÇÃO
• Socket Descriptor Leak ocorre quando conexões via sockets são abertas, e por algum motivo, não são fechadas, especialmente do lado servidor;
• O acúmulo de conexões abertas sem fechar pode ocasionar uma falha no decorrer do tempo, já que servidores possuem um limite de conexões abertas simultaneamente.
SOCKET DESCRIPTOR LEAK NA JDK
• Reportado em 05/09/2008, apresentando as versões 1.6.0_02,
1.6.0_04 e 1.5.0_14.
• Corrigido em 22/11/2008.
• Fonte: link http://bugs.java.com/view_bug.do?bug_id=6745052
SOCKET DESCRIPTOR LEAK NA JDK
• “Descritores de arquivos referente a sockets TCP não são liberadoscorretamente quando se usa a classe SSLServerSocket (especialmentecom muitas instâncias) em sistemas Linux. Se um servidor de aplicação(como Tomcat) executar por um longo período de tempo, esseproblema irá causar o erro ‘too many open files’, e uma negação doserviço”.
• Texto retirado de: http://bugs.java.com/view_bug.do?bug_id=6745052
SOCKET DESCRIPTOR LEAK NA JDK
• Conexões SSL (Secure Socket Layer) criam um canal criptografadoentre um Servidor Web e um navegador (browser) para garantir quetodos os dados sejam sigilosos e seguros.
• Texto retirado de: http://www.comodobr.com/ssl_o_que_e.php
SOCKET DESCRIPTOR LEAK NA JDK
• Uma conexão socket que não se fecha caracteriza a ativação de umafalta (AR Fault), pois temporariamente não produz um erro;
• Um conjunto de conexões abertas simultaneamente irão caracterizarum erro(AR Error), que serão propagados até o sistema falhar (ARFailure).
REPRODUÇÃO DO PROBLEMA
Figura 1 – Código-fonte construído para reproduzir o erro.
REPRODUÇÃO DO PROBLEMA
Figura 2 – Execução da classe test1.java com os parâmetros fornecidos em:
http://bugs.java.com/view_bug.do?bug_id=6745052
REPRODUÇÃO DO PROBLEMA
Figura 3 – Execução do comando lsof para verificar os arquivos de socket que estão abertos no sistema
REPRODUÇÃO DO PROBLEMA
• “When lsof prints ‘Can´t identify Protocol’, this usually relates to
sockets. So, somewhere in your code you are probably
connecting sockets and not closing them properly”.
• Texto retirado de:
http://stackoverflow.com/questions/7911840/seeing-too-many-
lsof-cant-identify-protocol
REPRODUÇÃO DO PROBLEMA
Figura 4 – Falha apresentada após o sistema ser parametrizado para abrir 9000 conexões
CONCLUSÃO
• Foi possível reproduzir o problema, contudo foi necessário um
número maior de conexões do que o mencionado no erro
reportado.
REFERÊNCIA
• GROTTKE, M., MATIAS JR., R, TRIVEDI, K.S.. The Fundamentals of
Software Aging. 2008. 6 pág. Software Reliability Engineering Workshops.
• Link http://bugs.java.com/view_bug.do?bug_id=6745052. Acesso em: 29
de Março de 2015.
• Link http://www.comodobr.com/ssl_o_que_e.php. Acesso em: 29 de Março
de 2015.
• Link http://stackoverflow.com/questions/7911840/seeing-too-many-lsof-
cant-identify-protocol. Acesso em: 29 de Março de 2015.