Author: asankha
Date: Sun Apr 29 15:21:46 2007
New Revision: 533570
URL: http://svn.apache.org/viewvc?view=rev&rev=533570
Log:
introduce mechanism to tune nhttp performance parameters through system
properties and/or a nhttp.properties property file
tunes parameters such as thread pool size, worker threads, socket and
connection timeouts etc
Added:
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/NHttpConfiguration.java
Modified:
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ClientHandler.java
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/HttpCoreNIOListener.java
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/HttpCoreNIOSender.java
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ServerHandler.java
Modified:
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ClientHandler.java
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ClientHandler.java?view=diff&rev=533570&r1=533569&r2=533570
==============================================================================
---
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ClientHandler.java
(original)
+++
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ClientHandler.java
Sun Apr 29 15:21:46 2007
@@ -68,9 +68,6 @@
ConfigurationContext cfgCtx = null;
private Executor workerPool = null;
- private static final int WORKERS_CORE_THREADS = 40;
- private static final int WORKERS_MAX_THREADS = 40;
- private static final long WORKER_KEEP_ALIVE = 5L;
private static final String REQUEST_BUFFER = "request-buffer";
private static final String RESPONSE_BUFFER = "response-buffer";
@@ -93,9 +90,13 @@
this.httpProcessor = getHttpProcessor();
this.connStrategy = new DefaultConnectionReuseStrategy();
+ NHttpConfiguration cfg = NHttpConfiguration.getInstance();
workerPool = new ThreadPoolExecutor(
- WORKERS_CORE_THREADS, WORKERS_MAX_THREADS, WORKER_KEEP_ALIVE,
TimeUnit.SECONDS,
- new LinkedBlockingQueue(),
+ cfg.getClientCoreThreads(),
+ cfg.getClientMaxThreads(),
+ cfg.getClientKeepalive(), TimeUnit.SECONDS,
+ cfg.getClientQueueLen() == -1 ?
+ new LinkedBlockingQueue() : new
LinkedBlockingQueue(cfg.getServerQueueLen()),
new DefaultThreadFactory(new ThreadGroup("Client Worker thread
group"), "HttpClientWorker"));
}
Modified:
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/HttpCoreNIOListener.java
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/HttpCoreNIOListener.java?view=diff&rev=533570&r1=533569&r2=533570
==============================================================================
---
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/HttpCoreNIOListener.java
(original)
+++
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/HttpCoreNIOListener.java
Sun Apr 29 15:21:46 2007
@@ -75,7 +75,8 @@
private void startServerEngine(int port) {
HttpParams params = getServerParameters();
try {
- ioReactor = new DefaultListeningIOReactor(2, params);
+ ioReactor = new DefaultListeningIOReactor(
+ NHttpConfiguration.getInstance().getServerIOWorkers(), params);
} catch (IOException e) {
log.error("Error starting the IOReactor", e);
}
@@ -107,11 +108,16 @@
*/
private HttpParams getServerParameters() {
HttpParams params = new BasicHttpParams();
+ NHttpConfiguration cfg = NHttpConfiguration.getInstance();
params
- .setIntParameter(HttpConnectionParams.SO_TIMEOUT, 30000)
- .setIntParameter(HttpConnectionParams.SOCKET_BUFFER_SIZE, 8 * 1024)
- .setBooleanParameter(HttpConnectionParams.STALE_CONNECTION_CHECK,
false)
- .setBooleanParameter(HttpConnectionParams.TCP_NODELAY, true)
+ .setIntParameter(HttpConnectionParams.SO_TIMEOUT,
+ cfg.getProperty(HttpConnectionParams.SO_TIMEOUT, 30000))
+ .setIntParameter(HttpConnectionParams.SOCKET_BUFFER_SIZE,
+ cfg.getProperty(HttpConnectionParams.SOCKET_BUFFER_SIZE, 8 *
1024))
+ .setBooleanParameter(HttpConnectionParams.STALE_CONNECTION_CHECK,
+ cfg.getProperty(HttpConnectionParams.STALE_CONNECTION_CHECK,
0) == 1)
+ .setBooleanParameter(HttpConnectionParams.TCP_NODELAY,
+ cfg.getProperty(HttpConnectionParams.TCP_NODELAY, 1) == 1)
.setParameter(HttpProtocolParams.ORIGIN_SERVER,
"Synapse-HttpComponents-NIO");
return params;
}
Modified:
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/HttpCoreNIOSender.java
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/HttpCoreNIOSender.java?view=diff&rev=533570&r1=533569&r2=533570
==============================================================================
---
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/HttpCoreNIOSender.java
(original)
+++
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/HttpCoreNIOSender.java
Sun Apr 29 15:21:46 2007
@@ -114,7 +114,8 @@
HttpParams params = getClientParameters();
try {
- ioReactor = new DefaultConnectingIOReactor(2, params);
+ ioReactor = new DefaultConnectingIOReactor(
+ NHttpConfiguration.getInstance().getClientIOWorkers(), params);
} catch (IOException e) {
log.error("Error starting the IOReactor", e);
}
@@ -172,13 +173,19 @@
* @return the applicable HTTP protocol parameters
*/
private HttpParams getClientParameters() {
+ NHttpConfiguration cfg = NHttpConfiguration.getInstance();
HttpParams params = new BasicHttpParams();
params
- .setIntParameter(HttpConnectionParams.SO_TIMEOUT, 30000)
- .setIntParameter(HttpConnectionParams.CONNECTION_TIMEOUT, 10000)
- .setIntParameter(HttpConnectionParams.SOCKET_BUFFER_SIZE, 8 * 1024)
- .setBooleanParameter(HttpConnectionParams.STALE_CONNECTION_CHECK,
false)
- .setBooleanParameter(HttpConnectionParams.TCP_NODELAY, true)
+ .setIntParameter(HttpConnectionParams.SO_TIMEOUT,
+ cfg.getProperty(HttpConnectionParams.SO_TIMEOUT, 30000))
+ .setIntParameter(HttpConnectionParams.CONNECTION_TIMEOUT,
+ cfg.getProperty(HttpConnectionParams.CONNECTION_TIMEOUT,
10000))
+ .setIntParameter(HttpConnectionParams.SOCKET_BUFFER_SIZE,
+ cfg.getProperty(HttpConnectionParams.SOCKET_BUFFER_SIZE, 8 *
1024))
+ .setBooleanParameter(HttpConnectionParams.STALE_CONNECTION_CHECK,
+ cfg.getProperty(HttpConnectionParams.STALE_CONNECTION_CHECK,
0) == 1)
+ .setBooleanParameter(HttpConnectionParams.TCP_NODELAY,
+ cfg.getProperty(HttpConnectionParams.TCP_NODELAY, 1) == 1)
.setParameter(HttpProtocolParams.USER_AGENT,
"Synapse-HttpComponents-NIO");
return params;
}
Added:
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/NHttpConfiguration.java
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/NHttpConfiguration.java?view=auto&rev=533570
==============================================================================
---
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/NHttpConfiguration.java
(added)
+++
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/NHttpConfiguration.java
Sun Apr 29 15:21:46 2007
@@ -0,0 +1,130 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.axis2.transport.nhttp;
+
+import org.apache.commons.logging.LogFactory;
+import org.apache.commons.logging.Log;
+import org.apache.http.params.HttpConnectionParams;
+
+import java.util.Properties;
+import java.io.IOException;
+import java.net.URL;
+
+/**
+ * Store and manage properties that tune the nhttp transport
+ */
+public class NHttpConfiguration {
+
+ // defaults
+ private static final int WORKERS_CORE_THREADS = 20;
+ private static final int WORKERS_MAX_THREADS = 40;
+ private static final int WORKER_KEEP_ALIVE = 5;
+ private static final int BLOCKING_QUEUE_LENGTH = -1;
+ private static final int IO_WORKER_COUNT = 2;
+
+ // server listener
+ private static final String S_T_CORE = "snd_t_core";
+ private static final String S_T_MAX = "snd_t_max";
+ private static final String S_T_ALIVE = "snd_alive_sec";
+ private static final String S_T_QLEN = "snd_qlen";
+ private static final String S_IO_WORKERS = "snd_io_threads";
+
+ // client sender
+ private static final String C_T_CORE = "lst_t_core";
+ private static final String C_T_MAX = "lst_t_max";
+ private static final String C_T_ALIVE = "lst_alive_sec";
+ private static final String C_T_QLEN = "lst_qlen";
+ private static final String C_IO_WORKERS = "lst_io_threads";
+
+ private static final Log log = LogFactory.getLog(NHttpConfiguration.class);
+ private static NHttpConfiguration _instance = new NHttpConfiguration();
+ private Properties props = new Properties();
+
+ private NHttpConfiguration() {
+ try {
+
props.load(getClass().getClassLoader().getResourceAsStream("nhttp.properties"));
+ } catch (Exception ignore) {}
+ }
+
+ public static NHttpConfiguration getInstance() {
+ return _instance;
+ }
+
+ public int getServerCoreThreads() {
+ return getProperty(S_T_CORE, WORKERS_CORE_THREADS);
+ }
+
+ public int getServerMaxThreads() {
+ return getProperty(S_T_MAX, WORKERS_MAX_THREADS);
+ }
+
+ public int getServerKeepalive() {
+ return getProperty(S_T_ALIVE, WORKER_KEEP_ALIVE);
+ }
+
+ public int getServerQueueLen() {
+ return getProperty(S_T_QLEN, BLOCKING_QUEUE_LENGTH);
+ }
+
+ public int getServerIOWorkers() {
+ return getProperty(S_IO_WORKERS, IO_WORKER_COUNT);
+ }
+
+
+ public int getClientCoreThreads() {
+ return getProperty(C_T_CORE, WORKERS_CORE_THREADS);
+ }
+
+ public int getClientMaxThreads() {
+ return getProperty(C_T_MAX, WORKERS_MAX_THREADS);
+ }
+
+ public int getClientKeepalive() {
+ return getProperty(C_T_ALIVE, WORKER_KEEP_ALIVE);
+ }
+
+ public int getClientQueueLen() {
+ return getProperty(C_T_QLEN, BLOCKING_QUEUE_LENGTH);
+ }
+
+ public int getClientIOWorkers() {
+ return getProperty(C_IO_WORKERS, IO_WORKER_COUNT);
+ }
+
+ /**
+ * Get properties that tune nhttp transport. Preference to system
properties
+ * @param name name of the system/config property
+ * @param def default value to return if the property is not set
+ * @return the value of the property to be used
+ */
+ public int getProperty(String name, int def) {
+ String val = System.getProperty(name);
+ if (val == null) {
+ val = props.getProperty(name);
+ }
+
+ if (val != null && Integer.valueOf(val).intValue() > 0) {
+ log.debug("Using nhttp tuning parameter : " + name + " = " + val);
+ return Integer.valueOf(val).intValue();
+ }
+ return def;
+ }
+
+}
Modified:
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ServerHandler.java
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ServerHandler.java?view=diff&rev=533570&r1=533569&r2=533570
==============================================================================
---
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ServerHandler.java
(original)
+++
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/ServerHandler.java
Sun Apr 29 15:21:46 2007
@@ -69,9 +69,6 @@
/** the thread pool to process requests */
private Executor workerPool = null;
- private static final int WORKERS_CORE_THREADS = 40;
- private static final int WORKERS_MAX_THREADS = 40;
- private static final long WORKER_KEEP_ALIVE = 5L;
private static final String REQUEST_SINK_CHANNEL = "request-sink-channel";
private static final String RESPONSE_SOURCE_CHANNEL =
"response-source-channel";
@@ -88,9 +85,13 @@
this.httpProcessor = getHttpProcessor();
this.connStrategy = new DefaultConnectionReuseStrategy();
+ NHttpConfiguration cfg = NHttpConfiguration.getInstance();
this.workerPool = new ThreadPoolExecutor(
- WORKERS_CORE_THREADS, WORKERS_MAX_THREADS, WORKER_KEEP_ALIVE,
TimeUnit.SECONDS,
- new LinkedBlockingQueue(),
+ cfg.getServerCoreThreads(),
+ cfg.getServerMaxThreads(),
+ cfg.getServerKeepalive(), TimeUnit.SECONDS,
+ cfg.getServerQueueLen() == -1 ?
+ new LinkedBlockingQueue() : new
LinkedBlockingQueue(cfg.getServerQueueLen()),
new DefaultThreadFactory(new ThreadGroup("Server Worker thread
group"), "HttpServerWorker"));
}
@@ -137,7 +138,7 @@
} catch (IOException e) {
handleException("Error processing request received for : " +
request.getRequestLine().getUri(), e, conn);
- } catch (RejectedExecutionException e) {
+ } catch (Exception e) {
handleException("Error processing request received for : " +
request.getRequestLine().getUri(), e, conn);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]