Author: remy.maucherat(a)jboss.com
Date: 2011-03-12 16:30:43 -0500 (Sat, 12 Mar 2011)
New Revision: 1674
Modified:
trunk/java/org/apache/catalina/connector/Connector.java
trunk/java/org/apache/coyote/http11/Http11Protocol.java
trunk/java/org/apache/tomcat/util/buf/StringCache.java
trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java
Log:
- Add various low memory defaults.
- Recycle facades.
- Discard processors and disable keepalive for HTTP java.io.
- Disable string cache.
- Lower polleSize for APR and java.io.
- Lower sendfileSize for APR.
- AJP will still use more memory (it requires lots of active processors), and native HTTP
should retain
decent performance (java.io HTTP will drop however).
Modified: trunk/java/org/apache/catalina/connector/Connector.java
===================================================================
--- trunk/java/org/apache/catalina/connector/Connector.java 2011-03-12 17:58:07 UTC (rev
1673)
+++ trunk/java/org/apache/catalina/connector/Connector.java 2011-03-12 21:30:43 UTC (rev
1674)
@@ -60,7 +60,8 @@
* Alternate flag to enable recycling of facades.
*/
public static final boolean RECYCLE_FACADES =
-
Boolean.valueOf(System.getProperty("org.apache.catalina.connector.RECYCLE_FACADES",
"false")).booleanValue();
+
Boolean.valueOf(System.getProperty("org.apache.catalina.connector.RECYCLE_FACADES",
+ (org.apache.tomcat.util.Constants.LOW_MEMORY) ? "true" :
"false")).booleanValue();
protected static final boolean X_POWERED_BY =
Modified: trunk/java/org/apache/coyote/http11/Http11Protocol.java
===================================================================
--- trunk/java/org/apache/coyote/http11/Http11Protocol.java 2011-03-12 17:58:07 UTC (rev
1673)
+++ trunk/java/org/apache/coyote/http11/Http11Protocol.java 2011-03-12 21:30:43 UTC (rev
1674)
@@ -333,7 +333,7 @@
* Maximum number of requests which can be performed over a keepalive
* connection. The default is the same as for Apache HTTP Server.
*/
- protected int maxKeepAliveRequests = 100;
+ protected int maxKeepAliveRequests = (org.apache.tomcat.util.Constants.LOW_MEMORY) ?
1 : 100;
public int getMaxKeepAliveRequests() { return maxKeepAliveRequests; }
public void setMaxKeepAliveRequests(int mkar) { maxKeepAliveRequests = mkar; }
@@ -550,12 +550,13 @@
protected static class Http11ConnectionHandler implements Handler {
protected Http11Protocol proto;
- protected AtomicLong registerCount = new AtomicLong(0);
+ protected AtomicLong registerCount =
(org.apache.tomcat.util.Constants.LOW_MEMORY) ? null : new AtomicLong(0);
protected RequestGroupInfo global = new RequestGroupInfo();
protected ConcurrentHashMap<Socket, Http11Processor> connections =
new ConcurrentHashMap<Socket, Http11Processor>();
protected ConcurrentLinkedQueue<Http11Processor> recycledProcessors =
+ (org.apache.tomcat.util.Constants.LOW_MEMORY) ? null :
new ConcurrentLinkedQueue<Http11Processor>() {
protected AtomicInteger size = new AtomicInteger(0);
public boolean offer(Http11Processor processor) {
@@ -626,7 +627,9 @@
} finally {
if (state != SocketState.LONG) {
connections.remove(socket);
- recycledProcessors.offer(result);
+ if (recycledProcessors != null) {
+ recycledProcessors.offer(result);
+ }
} else {
if (proto.endpoint.isRunning()) {
proto.endpoint.getEventPoller().add(socket,
result.getTimeout(),
@@ -640,7 +643,7 @@
}
public SocketState process(Socket socket) {
- Http11Processor processor = recycledProcessors.poll();
+ Http11Processor processor = (recycledProcessors != null) ?
recycledProcessors.poll() : null;
try {
if (processor == null) {
@@ -662,7 +665,7 @@
connections.put(socket, processor);
proto.endpoint.getEventPoller().add(socket, processor.getTimeout(),
processor.getResumeNotification(), false);
- } else {
+ } else if (recycledProcessors != null) {
recycledProcessors.offer(processor);
}
return state;
@@ -688,7 +691,9 @@
Http11Protocol.log.error
(sm.getString("http11protocol.proto.error"), e);
}
- recycledProcessors.offer(processor);
+ if (recycledProcessors != null) {
+ recycledProcessors.offer(processor);
+ }
return SocketState.CLOSED;
}
@@ -708,7 +713,9 @@
processor.setSocketBuffer(proto.socketBuffer);
processor.setMaxSavePostSize(proto.maxSavePostSize);
processor.setServer(proto.server);
- register(processor);
+ if (!org.apache.tomcat.util.Constants.LOW_MEMORY) {
+ register(processor);
+ }
return processor;
}
Modified: trunk/java/org/apache/tomcat/util/buf/StringCache.java
===================================================================
--- trunk/java/org/apache/tomcat/util/buf/StringCache.java 2011-03-12 17:58:07 UTC (rev
1673)
+++ trunk/java/org/apache/tomcat/util/buf/StringCache.java 2011-03-12 21:30:43 UTC (rev
1674)
@@ -41,7 +41,8 @@
* Enabled ?
*/
protected static boolean byteEnabled =
-
("true".equals(System.getProperty("org.apache.tomcat.util.buf.StringCache.byte.enabled",
"true")));
+
("true".equals(System.getProperty("org.apache.tomcat.util.buf.StringCache.byte.enabled",
+ org.apache.tomcat.util.Constants.LOW_MEMORY ? "false" :
"true")));
protected static boolean charEnabled =
Modified: trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
===================================================================
--- trunk/java/org/apache/tomcat/util/net/AprEndpoint.java 2011-03-12 17:58:07 UTC (rev
1673)
+++ trunk/java/org/apache/tomcat/util/net/AprEndpoint.java 2011-03-12 21:30:43 UTC (rev
1674)
@@ -170,7 +170,7 @@
/**
* Maximum amount of worker threads.
*/
- protected int maxThreads = 32 * Runtime.getRuntime().availableProcessors();
+ protected int maxThreads = (org.apache.tomcat.util.Constants.LOW_MEMORY) ? 32 : 32 *
Runtime.getRuntime().availableProcessors();
public void setMaxThreads(int maxThreads) { this.maxThreads = maxThreads; }
public int getMaxThreads() { return maxThreads; }
@@ -584,10 +584,18 @@
// Poller size defaults
if (pollerSize <= 0) {
- pollerSize = (OS.IS_WIN32 || OS.IS_WIN64) ? (8 * 1024) : (32 * 1024);
+ if (org.apache.tomcat.util.Constants.LOW_MEMORY) {
+ pollerSize = (1 * 1024);
+ } else {
+ pollerSize = (OS.IS_WIN32 || OS.IS_WIN64) ? (8 * 1024) : (32 * 1024);
+ }
}
if (sendfileSize <= 0) {
- sendfileSize = (OS.IS_WIN32 || OS.IS_WIN64) ? (1 * 1024) : (16 * 1024);
+ if (org.apache.tomcat.util.Constants.LOW_MEMORY) {
+ sendfileSize = 128;
+ } else {
+ sendfileSize = (OS.IS_WIN32 || OS.IS_WIN64) ? (1 * 1024) : (16 * 1024);
+ }
}
long inetAddress = Address.info(addressStr, family,
Modified: trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java
===================================================================
--- trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java 2011-03-12 17:58:07 UTC (rev
1673)
+++ trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java 2011-03-12 21:30:43 UTC (rev
1674)
@@ -155,7 +155,7 @@
/**
* Maximum amount of worker threads.
*/
- protected int maxThreads = 512 * Runtime.getRuntime().availableProcessors();
+ protected int maxThreads = (org.apache.tomcat.util.Constants.LOW_MEMORY) ? 256 : 512
* Runtime.getRuntime().availableProcessors();
public void setMaxThreads(int maxThreads) { this.maxThreads = maxThreads; }
public int getMaxThreads() { return maxThreads; }
@@ -171,7 +171,7 @@
/**
* Size of the socket poller.
*/
- protected int pollerSize = 32 * 1024;
+ protected int pollerSize = (org.apache.tomcat.util.Constants.LOW_MEMORY) ? (1 * 1024)
: (32 * 1024);
public void setPollerSize(int pollerSize) { this.pollerSize = pollerSize; }
public int getPollerSize() { return pollerSize; }
Show replies by date