directory-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Martin Zdila (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (DIRAPI-52) Too many open files on some servers
Date Wed, 27 Jul 2011 12:57:10 GMT

    [ https://issues.apache.org/jira/browse/DIRAPI-52?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13071701#comment-13071701
] 

Martin Zdila commented on DIRAPI-52:
------------------------------------

Even simpler testcase:

public class LdapTestcase {
	public static void main(final String[] args) throws Exception {
		final LdapConnectionConfig lcc = new LdapConnectionConfig();
		lcc.setLdapHost("ad.example.com");
		lcc.setUseSsl(true);
		lcc.setLdapPort(LdapConnectionConfig.DEFAULT_LDAPS_PORT);
		lcc.setTrustManagers(new NoVerificationTrustManager());

		for (int i = 0; i < 1000; i++) {
			System.out.println(i);
			final LdapNetworkConnection connection = new LdapNetworkConnection(lcc);
			connection.bind();
			connection.unBind();
			connection.close();
		}
	}
}

Exception:

2011-07-27 14:52:36,162 ERROR SimpleIoProcessorPool - Failed to create a new instance of org.apache.mina.transport.socket.nio.NioProcessor:null
java.lang.reflect.InvocationTargetException
	at sun.reflect.GeneratedConstructorAccessor4.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at org.apache.mina.core.service.SimpleIoProcessorPool.<init>(SimpleIoProcessorPool.java:180)
	at org.apache.mina.core.service.SimpleIoProcessorPool.<init>(SimpleIoProcessorPool.java:112)
	at org.apache.mina.core.polling.AbstractPollingIoConnector.<init>(AbstractPollingIoConnector.java:93)
	at org.apache.mina.transport.socket.nio.NioSocketConnector.<init>(NioSocketConnector.java:56)
	at org.apache.directory.ldap.client.api.LdapNetworkConnection.connect(LdapNetworkConnection.java:495)
	at org.apache.directory.ldap.client.api.LdapNetworkConnection.bindAsync(LdapNetworkConnection.java:1274)
	at org.apache.directory.ldap.client.api.LdapNetworkConnection.bind(LdapNetworkConnection.java:1131)
	at org.apache.directory.ldap.client.api.LdapNetworkConnection.bind(LdapNetworkConnection.java:907)
	at mway.UserDaoApacheDirectoryLdapApiImpl.<init>(UserDaoApacheDirectoryLdapApiImpl.java:32)
	at mway.UserDaoApacheDirectoryLdapApiImpl.main(UserDaoApacheDirectoryLdapApiImpl.java:18)
Caused by: org.apache.mina.core.RuntimeIoException: Failed to open a selector.
	at org.apache.mina.transport.socket.nio.NioProcessor.<init>(NioProcessor.java:61)
	... 13 more
Caused by: java.io.IOException: Too many open files
	at sun.nio.ch.EPollArrayWrapper.epollCreate(Native Method)
	at sun.nio.ch.EPollArrayWrapper.<init>(EPollArrayWrapper.java:69)
	at sun.nio.ch.EPollSelectorImpl.<init>(EPollSelectorImpl.java:52)
	at sun.nio.ch.EPollSelectorProvider.openSelector(EPollSelectorProvider.java:18)
	at java.nio.channels.Selector.open(Selector.java:209)
	at org.apache.mina.transport.socket.nio.NioProcessor.<init>(NioProcessor.java:59)
	... 13 more
Exception in thread "main" org.apache.mina.core.RuntimeIoException: Failed to create a new
instance of org.apache.mina.transport.socket.nio.NioProcessor:null
	at org.apache.mina.core.service.SimpleIoProcessorPool.<init>(SimpleIoProcessorPool.java:198)
	at org.apache.mina.core.service.SimpleIoProcessorPool.<init>(SimpleIoProcessorPool.java:112)
	at org.apache.mina.core.polling.AbstractPollingIoConnector.<init>(AbstractPollingIoConnector.java:93)
	at org.apache.mina.transport.socket.nio.NioSocketConnector.<init>(NioSocketConnector.java:56)
	at org.apache.directory.ldap.client.api.LdapNetworkConnection.connect(LdapNetworkConnection.java:495)
	at org.apache.directory.ldap.client.api.LdapNetworkConnection.bindAsync(LdapNetworkConnection.java:1274)
	at org.apache.directory.ldap.client.api.LdapNetworkConnection.bind(LdapNetworkConnection.java:1131)
	at org.apache.directory.ldap.client.api.LdapNetworkConnection.bind(LdapNetworkConnection.java:907)
	at mway.UserDaoApacheDirectoryLdapApiImpl.<init>(UserDaoApacheDirectoryLdapApiImpl.java:32)
	at mway.UserDaoApacheDirectoryLdapApiImpl.main(UserDaoApacheDirectoryLdapApiImpl.java:18)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.GeneratedConstructorAccessor4.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at org.apache.mina.core.service.SimpleIoProcessorPool.<init>(SimpleIoProcessorPool.java:180)
	... 9 more
Caused by: org.apache.mina.core.RuntimeIoException: Failed to open a selector.
	at org.apache.mina.transport.socket.nio.NioProcessor.<init>(NioProcessor.java:61)
	... 13 more
Caused by: java.io.IOException: Too many open files
	at sun.nio.ch.EPollArrayWrapper.epollCreate(Native Method)
	at sun.nio.ch.EPollArrayWrapper.<init>(EPollArrayWrapper.java:69)
	at sun.nio.ch.EPollSelectorImpl.<init>(EPollSelectorImpl.java:52)
	at sun.nio.ch.EPollSelectorProvider.openSelector(EPollSelectorProvider.java:18)
	at java.nio.channels.Selector.open(Selector.java:209)
	at org.apache.mina.transport.socket.nio.NioProcessor.<init>(NioProcessor.java:59)
	... 13 more


Again, increasing ulimit is not a solution, as this is used in a server application.

> Too many open files on some servers
> -----------------------------------
>
>                 Key: DIRAPI-52
>                 URL: https://issues.apache.org/jira/browse/DIRAPI-52
>             Project: Directory Client API
>          Issue Type: Bug
>    Affects Versions: 1.0.0-M4, 1.0.0-M5
>         Environment: various, see description
>            Reporter: Martin Zdila
>            Priority: Critical
>
> Testcase:
> 		final LdapConnectionConfig lcc = new LdapConnectionConfig();
> 		lcc.setLdapHost("ad.example.com");
> 		lcc.setUseSsl(true);
> 		lcc.setLdapPort(LdapConnectionConfig.DEFAULT_LDAPS_PORT);
> 		lcc.setTrustManagers(new NoVerificationTrustManager());
> 		for (int i = 0; i < 100; i++) {
> 			System.out.println(i);
> 			final LdapNetworkConnection connection = new LdapNetworkConnection(lcc);
> 			connection.bind();
> 			final EntryCursor cursor = connection.search("ou=something,dc=example.com", "(&(cn=comeCommonName)(objectClass=person)(sn=*)(givenName=*))",
SearchScope.SUBTREE, "cn");
> 			while (cursor.next()) {
> 				cursor.get();
> 			}
> 			connection.unBind();
> 			connection.close();
> 			Thread.sleep(1000);
> 		}
> Running this on some servers causes many open files and they are growing on each iteration:
> lsof -p <pid>:
> ...
> java    18719 gofer   37u  0000        0,7        0      13 anon_inode
> java    18719 gofer   38r  FIFO        0,6      0t0 9155974 pipe
> java    18719 gofer   39w  FIFO        0,6      0t0 9155974 pipe
> java    18719 gofer   40u  0000        0,7        0      13 anon_inode
> java    18719 gofer   41r  FIFO        0,6      0t0 9155976 pipe
> java    18719 gofer   42w  FIFO        0,6      0t0 9155976 pipe
> java    18719 gofer   43u  0000        0,7        0      13 anon_inode
> java    18719 gofer   44r  FIFO        0,6      0t0 9155977 pipe
> java    18719 gofer   45w  FIFO        0,6      0t0 9155977 pipe
> java    18719 gofer   46u  0000        0,7        0      13 anon_inode
> java    18719 gofer   47r  FIFO        0,6      0t0 9155978 pipe
> java    18719 gofer   48w  FIFO        0,6      0t0 9155978 pipe
> java    18719 gofer   49u  0000        0,7        0      13 anon_inode
> java    18719 gofer   50r  FIFO        0,6      0t0 9155980 pipe
> java    18719 gofer   51w  FIFO        0,6      0t0 9155980 pipe
> java    18719 gofer   52u  0000        0,7        0      13 anon_inode
> java    18719 gofer   53r  FIFO        0,6      0t0 9155981 pipe
> java    18719 gofer   54w  FIFO        0,6      0t0 9155981 pipe
> java    18719 gofer   55u  0000        0,7        0      13 anon_inode
> java    18719 gofer   56r  FIFO        0,6      0t0 9155982 pipe
> java    18719 gofer   57w  FIFO        0,6      0t0 9155982 pipe
> java    18719 gofer   58u  0000        0,7        0      13 anon_inode
> java    18719 gofer   59r  FIFO        0,6      0t0 9155984 pipe
> java    18719 gofer   60w  FIFO        0,6      0t0 9155984 pipe
> java    18719 gofer   61u  0000        0,7        0      13 anon_inode
> java    18719 gofer   62r  FIFO        0,6      0t0 9155985 pipe
> java    18719 gofer   63w  FIFO        0,6      0t0 9155985 pipe
> java    18719 gofer   64u  0000        0,7        0      13 anon_inode
> java    18719 gofer   65r  FIFO        0,6      0t0 9155986 pipe
> java    18719 gofer   66w  FIFO        0,6      0t0 9155986 pipe
> ... and many many more
> This happens on:
> Linux somedns1 2.6.26-2-xen-686 #1 SMP Thu Jan 27 05:44:37 UTC 2011 i686 GNU/Linux
> java version "1.6.0_26"
> Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
> Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing)
> Also on another platform, but there are slightly less open pipes and anon_inodes:
> Linux somedns2 2.6.26-2-686-bigmem #1 SMP Wed Nov 4 21:12:12 UTC 2009 i686 GNU/Linux
> java version "1.6.0_12"
> Java(TM) SE Runtime Environment (build 1.6.0_12-b04)
> Java HotSpot(TM) Server VM (build 11.2-b01, mixed mode)
> On my local computer I see only couple of open pipes and anon_inodes and they don't grow:
> Linux bono 2.6.38-10-generic #46-Ubuntu SMP Tue Jun 28 15:07:17 UTC 2011 x86_64 x86_64
x86_64 GNU/Linux
> java version "1.6.0_26"
> Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
> Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)
> I've found slightly similar isse here: http://issues.opennms.org/browse/NMS-4631
> New file handlers are being opened by Apache Mina. I am not sure who is responsible for
closing it. In my testcase the connection is properly closed.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message