Duplicate :
|
|
Relates :
|
|
Relates :
|
The DNS provider context does not cleanup the network resources upon a close. This problem was posted on the JNDI forum at java.sun.com import java.net.*; import javax.naming.*; import javax.naming.directory.*; import java.util.*; public class SocketLeak { public static void main(String argv[]) throws Exception { Map map = new HashMap(); Hashtable env= new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory"); env.put(Context.PROVIDER_URL,"dns://xxx.xxx.xxx.xxx"); int count = 0; while(true) { DirContext ctx = new InitialDirContext(env); ctx.close(); ctx = null; count++; System.out.println(count); } } } The above program loops for around 1020 times on solaris 8, after which it runs out of file descriptors, and fails with an exception below. Exception in thread "main" javax.naming.ConfigurationException. Root exception is java.net.SocketException: Too many open files at java.net.PlainDatagramSocketImpl.datagramSocketCreate(Native Method) at java.net.PlainDatagramSocketImpl.create(PlainDatagramSocketImpl.java:53) at java.net.DatagramSocket.createImpl(DatagramSocket.java:278) at java.net.DatagramSocket.<init>(DatagramSocket.java:127) at com.sun.jndi.dns.DnsClient.<init>(DnsClient.java:81) at com.sun.jndi.dns.Resolver.<init>(Resolver.java:33) at com.sun.jndi.dns.DnsContext.<init>(DnsContext.java:78) at com.sun.jndi.dns.DnsContextFactory.UrlToContext(DnsContextFactory.java:73) at com.sun.jndi.dns.DnsContextFactory.getInitialContext(DnsContextFactory.java:41) at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662) at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:243) at javax.naming.InitialContext.init(InitialContext.java:219) at javax.naming.InitialContext.<init>(InitialContext.java:195) at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.java:80) at SocketLeak.main(SocketLeak.java:17)
|