Ionic Framework - Parte 1 - Iniciando um Projeto mais Robusto
Socket Descriptor Leak na JDK
1. “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
3. 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.
4. 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
5. 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
6. 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
7. 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).
9. 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
10. REPRODUÇÃO DO PROBLEMA
Figura 3 – 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
13. 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.
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.