“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 liberados
corretamente quando se usa a classe SSLServerSocket (especialmente
com muitas instâncias) em sistemas Linux. Se um servidor de aplicação
(como Tomcat) executar por um longo período de tempo, esse
problema irá causar o erro ‘too many open files’, e uma negação do
serviç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 criptografado
entre um Servidor Web e um navegador (browser) para garantir que
todos 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 uma
falta (AR Fault), pois temporariamente não produz um erro;
• Um conjunto de conexões abertas simultaneamente irão caracterizar
um erro(AR Error), que serão propagados até o sistema falhar (AR
Failure).
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.

Socket Descriptor Leak encontrado na JDK

  • 1.
    “Apresentação do problemaSocket 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
  • 2.
    ROTEIRO • Introdução. • SocketDescriptor Leak na JDK. • Reprodução do problema. • Conclusão.
  • 3.
    INTRODUÇÃO • Socket DescriptorLeak 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.
  • 4.
    SOCKET DESCRIPTOR LEAKNA 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
  • 5.
    SOCKET DESCRIPTOR LEAKNA JDK • “Descritores de arquivos referente a sockets TCP não são liberados corretamente quando se usa a classe SSLServerSocket (especialmente com muitas instâncias) em sistemas Linux. Se um servidor de aplicação (como Tomcat) executar por um longo período de tempo, esse problema irá causar o erro ‘too many open files’, e uma negação do serviço”. • Texto retirado de: http://bugs.java.com/view_bug.do?bug_id=6745052
  • 6.
    SOCKET DESCRIPTOR LEAKNA JDK • Conexões SSL (Secure Socket Layer) criam um canal criptografado entre um Servidor Web e um navegador (browser) para garantir que todos os dados sejam sigilosos e seguros. • Texto retirado de: http://www.comodobr.com/ssl_o_que_e.php
  • 7.
    SOCKET DESCRIPTOR LEAKNA JDK • Uma conexão socket que não se fecha caracteriza a ativação de uma falta (AR Fault), pois temporariamente não produz um erro; • Um conjunto de conexões abertas simultaneamente irão caracterizar um erro(AR Error), que serão propagados até o sistema falhar (AR Failure).
  • 8.
    REPRODUÇÃO DO PROBLEMA Figura1 – Código-fonte construído para reproduzir o erro.
  • 9.
    REPRODUÇÃO DO PROBLEMA Figura2 – Execução da classe test1.java com os parâmetros fornecidos em: http://bugs.java.com/view_bug.do?bug_id=6745052
  • 10.
    REPRODUÇÃO DO PROBLEMA Figura3 – Execução do comando lsof para verificar os arquivos de socket que estão abertos no sistema
  • 11.
    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
  • 12.
    REPRODUÇÃO DO PROBLEMA Figura4 – Falha apresentada após o sistema ser parametrizado para abrir 9000 conexões
  • 13.
    CONCLUSÃO • Foi possívelreproduzir o problema, contudo foi necessário um número maior de conexões do que o mencionado no erro reportado.
  • 14.
    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.