14
Apresentação do problema Socket Descriptor Leak encontrado na JDKPublicado em setembro de 2008 Disponível em: http://bugs.java.com/view_bug.do?bug_id=6745052 Apresentador: Carlos Eduardo Dantas

Socket Descriptor Leak encontrado na JDK

Embed Size (px)

Citation preview

Page 1: Socket Descriptor Leak encontrado na JDK

“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

Page 2: Socket Descriptor Leak encontrado na JDK

ROTEIRO

• Introdução.

• Socket Descriptor Leak na JDK.

• Reprodução do problema.

• Conclusão.

Page 3: Socket Descriptor Leak encontrado na JDK

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.

Page 4: Socket Descriptor Leak encontrado na JDK

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

Page 5: Socket Descriptor Leak encontrado na JDK

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

Page 6: Socket Descriptor Leak encontrado na JDK

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

Page 7: Socket Descriptor Leak encontrado na JDK

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).

Page 8: Socket Descriptor Leak encontrado na JDK

REPRODUÇÃO DO PROBLEMA

Figura 1 – Código-fonte construído para reproduzir o erro.

Page 9: Socket Descriptor Leak encontrado na JDK

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

Page 10: Socket Descriptor Leak encontrado na JDK

REPRODUÇÃO DO PROBLEMA

Figura 3 – Execução do comando lsof para verificar os arquivos de socket que estão abertos no sistema

Page 11: Socket Descriptor Leak encontrado na JDK

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

Page 12: Socket Descriptor Leak encontrado na JDK

REPRODUÇÃO DO PROBLEMA

Figura 4 – Falha apresentada após o sistema ser parametrizado para abrir 9000 conexões

Page 13: Socket Descriptor Leak encontrado na JDK

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.

Page 14: Socket Descriptor Leak encontrado na JDK

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.