Author: remm Date: Wed Mar 22 03:30:42 2006 New Revision: 387838 URL: http://svn.apache.org/viewcvs?rev=387838&view=rev Log: - New defaults, which should be more production friendly. - New (cleaner) way of allocating pollers (note: the 62 size is there because it was an older Win32 limitation in APR). Normally, APR right now limits to 1024 on Windows.
Modified: tomcat/connectors/trunk/util/java/org/apache/tomcat/util/net/AprEndpoint.java tomcat/connectors/trunk/util/java/org/apache/tomcat/util/net/res/LocalStrings.properties Modified: tomcat/connectors/trunk/util/java/org/apache/tomcat/util/net/AprEndpoint.java URL: http://svn.apache.org/viewcvs/tomcat/connectors/trunk/util/java/org/apache/tomcat/util/net/AprEndpoint.java?rev=387838&r1=387837&r2=387838&view=diff ============================================================================== --- tomcat/connectors/trunk/util/java/org/apache/tomcat/util/net/AprEndpoint.java (original) +++ tomcat/connectors/trunk/util/java/org/apache/tomcat/util/net/AprEndpoint.java Wed Mar 22 03:30:42 2006 @@ -181,7 +181,7 @@ /** * Maximum amount of worker threads. */ - protected int maxThreads = 60; + protected int maxThreads = 40; public void setMaxThreads(int maxThreads) { this.maxThreads = maxThreads; } public int getMaxThreads() { return maxThreads; } @@ -197,7 +197,7 @@ /** * Size of the socket poller. */ - protected int pollerSize = 768; + protected int pollerSize = 16 * 1024; public void setPollerSize(int pollerSize) { this.pollerSize = pollerSize; } public int getPollerSize() { return pollerSize; } @@ -205,7 +205,7 @@ /** * Size of the sendfile (= concurrent files which can be served). */ - protected int sendfileSize = 256; + protected int sendfileSize = 1 * 1024; public void setSendfileSize(int sendfileSize) { this.sendfileSize = sendfileSize; } public int getSendfileSize() { return sendfileSize; } @@ -280,7 +280,7 @@ * Poll interval, in microseconds. The smaller the value, the more CPU the poller * will use, but the more responsive to activity it will be. */ - protected int pollTime = 5000; + protected int pollTime = 2000; public int getPollTime() { return pollTime; } public void setPollTime(int pollTime) { this.pollTime = pollTime; } @@ -627,15 +627,15 @@ // Start acceptor thread acceptorThread = new Thread(new Acceptor(), getName() + "-Acceptor"); - acceptorThread.setPriority(getThreadPriority()); - acceptorThread.setDaemon(true); + acceptorThread.setPriority(threadPriority); + acceptorThread.setDaemon(daemon); acceptorThread.start(); // Start poller thread poller = new Poller(); poller.init(); pollerThread = new Thread(poller, getName() + "-Poller"); - pollerThread.setPriority(getThreadPriority()); + pollerThread.setPriority(threadPriority); pollerThread.setDaemon(true); pollerThread.start(); @@ -644,7 +644,7 @@ sendfile = new Sendfile(); sendfile.init(); sendfileThread = new Thread(sendfile, getName() + "-Sendfile"); - sendfileThread.setPriority(getThreadPriority()); + sendfileThread.setPriority(threadPriority); sendfileThread.setDaemon(true); sendfileThread.start(); } @@ -872,6 +872,25 @@ } } + + /** + * Allocate a new poller of the specified size. + */ + protected long allocatePoller(int size, long pool, int timeout) { + try { + return Poll.create(size, pool, 0, timeout * 1000); + } catch (Error e) { + if (Status.APR_STATUS_IS_EINVAL(e.getError())) { + log.info(sm.getString("endpoint.poll.limitedpollsize", "" + size)); + return 0; + } else { + log.error(sm.getString("endpoint.poll.initfail"), e); + return -1; + } + } + } + + // --------------------------------------------------- Acceptor Inner Class @@ -946,21 +965,12 @@ */ protected void init() { pool = Pool.create(serverSockPool); - try { - serverPollset = Poll.create(pollerSize, pool, 0, soTimeout * 1000); - } catch (Error e) { - if (Status.APR_STATUS_IS_EINVAL(e.getError())) { - try { - // Use WIN32 maximum poll size - pollerSize = 62; - serverPollset = Poll.create(pollerSize, pool, 0, soTimeout * 1000); - log.warn(sm.getString("endpoint.poll.limitedpollsize")); - } catch (Error err) { - log.error(sm.getString("endpoint.poll.initfail"), e); - } - } else { - log.error(sm.getString("endpoint.poll.initfail"), e); - } + serverPollset = allocatePoller(pollerSize, pool, soTimeout); + if (serverPollset == 0 && pollerSize > 1024) { + serverPollset = allocatePoller(1024, pool, soTimeout); + } + if (serverPollset == 0) { + serverPollset = allocatePoller(62, pool, soTimeout); } desc = new long[pollerSize * 2]; keepAliveCount = 0; @@ -1080,7 +1090,7 @@ /* Any non timeup or interrupted error is critical */ if ((errn != Status.TIMEUP) && (errn != Status.EINTR)) { if (errn > Status.APR_OS_START_USERERR) { - errn -= Status.APR_OS_START_USERERR; + errn -= Status.APR_OS_START_USERERR; } log.error(sm.getString("endpoint.poll.fail", "" + errn, Error.strerror(errn))); // Handle poll critical failure @@ -1265,21 +1275,12 @@ */ protected void init() { pool = Pool.create(serverSockPool); - try { - sendfilePollset = Poll.create(sendfileSize, pool, 0, soTimeout * 1000); - } catch (Error e) { - if (Status.APR_STATUS_IS_EINVAL(e.getError())) { - try { - // Use WIN32 maximum poll size - sendfileSize = 62; - sendfilePollset = Poll.create(sendfileSize, pool, 0, soTimeout * 1000); - log.warn(sm.getString("endpoint.poll.limitedpollsize")); - } catch (Error err) { - log.error(sm.getString("endpoint.poll.initfail"), e); - } - } else { - log.error(sm.getString("endpoint.poll.initfail"), e); - } + sendfilePollset = allocatePoller(sendfileSize, pool, soTimeout); + if (sendfilePollset == 0 && pollerSize > 1024) { + sendfilePollset = allocatePoller(1024, pool, soTimeout); + } + if (sendfilePollset == 0) { + sendfilePollset = allocatePoller(62, pool, soTimeout); } desc = new long[sendfileSize * 2]; sendfileData = new HashMap(sendfileSize); @@ -1497,7 +1498,7 @@ } - // -------------------------------------- ConnectionHandler Inner Interface + // ------------------------------------------------ Handler Inner Interface /** Modified: tomcat/connectors/trunk/util/java/org/apache/tomcat/util/net/res/LocalStrings.properties URL: http://svn.apache.org/viewcvs/tomcat/connectors/trunk/util/java/org/apache/tomcat/util/net/res/LocalStrings.properties?rev=387838&r1=387837&r2=387838&view=diff ============================================================================== --- tomcat/connectors/trunk/util/java/org/apache/tomcat/util/net/res/LocalStrings.properties (original) +++ tomcat/connectors/trunk/util/java/org/apache/tomcat/util/net/res/LocalStrings.properties Wed Mar 22 03:30:42 2006 @@ -15,7 +15,7 @@ endpoint.init.bind=Socket bind failed: [{0}] {1} endpoint.init.listen=Socket listen failed: [{0}] {1} endpoint.accept.fail=Socket accept failed -endpoint.poll.limitedpollsize=Failed to create poller with specified size, uses 62 instead +endpoint.poll.limitedpollsize=Failed to create poller with specified size of {0} endpoint.poll.initfail=Poller creation failed endpoint.poll.fail=Critical poller failure (restarting poller): [{0}] {1} endpoint.poll.error=Unexpected poller error --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]