[
https://issues.apache.org/jira/browse/HTTPCORE-509?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16354471#comment-16354471
]
Gary Gregory commented on HTTPCORE-509:
---------------------------------------
[~olegk]: What do you think about addressing this ticket as follows:
{noformat}
diff --git
a/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/IOReactorConfig.java
b/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/IOReactorConfig.java
index 26fb11ea5..ecda462e5 100644
---
a/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/IOReactorConfig.java
+++
b/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/IOReactorConfig.java
@@ -27,6 +27,9 @@
package org.apache.http.impl.nio.reactor;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+
import org.apache.http.util.Args;
/**
@@ -36,6 +39,19 @@
*/
public final class IOReactorConfig implements Cloneable {
+ static int getIntProperty(final String key, final int defaultValue) {
+ return AccessController.doPrivileged(new PrivilegedAction<Integer>() {
+ @Override
+ public Integer run() {
+ final String strValue= System.getProperty(key);
+ if (strValue == null) {
+ return Integer.valueOf(defaultValue);
+ }
+ return Integer.valueOf(strValue);
+ }
+ });
+ }
+
public static final IOReactorConfig DEFAULT = new Builder().build();
// TODO: make final
@@ -59,7 +75,9 @@ public IOReactorConfig() {
this.selectInterval = 1000;
this.shutdownGracePeriod = 500;
this.interestOpQueued = false;
- this.ioThreadCount = Runtime.getRuntime().availableProcessors();
+ this.ioThreadCount = Args.positive(
+ getIntProperty("http.IOReactorConfig.ioThreadCount",
Runtime.getRuntime().availableProcessors()),
+ "ioThreadCount");
this.soTimeout = 0;
this.soReuseAddress = false;
this.soLinger = -1;
@@ -394,7 +412,9 @@ public static Builder copy(final IOReactorConfig config) {
this.selectInterval = 1000;
this.shutdownGracePeriod = 500;
this.interestOpQueued = false;
- this.ioThreadCount = Runtime.getRuntime().availableProcessors();
+ this.ioThreadCount = Args.positive(
+ getIntProperty("http.IOReactorConfig.ioThreadCount",
Runtime.getRuntime().availableProcessors()),
+ "ioThreadCount");
this.soTimeout = 0;
this.soReuseAddress = false;
this.soLinger = -1;
{noformat}
?
> AVAIL_PROCS is autoconfigured based on core count
> -------------------------------------------------
>
> Key: HTTPCORE-509
> URL: https://issues.apache.org/jira/browse/HTTPCORE-509
> Project: HttpComponents HttpCore
> Issue Type: Improvement
> Components: HttpCore NIO
> Affects Versions: 4.4.9
> Reporter: Elijah Zupancic
> Priority: Major
>
> In [IOReactorConfig:39|
> https://github.com/apache/httpcomponents-core/blob/92c4c6ff64a9a4a0b0677338c03ebd24bfe1b219/httpcore-nio/src/main/java/org/apache/http/impl/nio/reactor/IOReactorConfig.java#L39
> ], the default value for thread count is based on the detected cores on the
> system. This is usually acceptable. However, if the library is being run
> within a container where the reported number of CPUs does not match the
> actual amount of CPU available, you will see too many threads created in the
> pool leading to performance degradation.
> Of course a direct user of this library will be able to set this value to a
> sensible number. However, you will typically see httpcore-nio 4-5 steps down
> the dependency graph and it is being used by other open source components
> which in turn are being used by other components.
> I would suggest that we optionally read a system parameter for the value of
> AVAIL_PROCS. If that system parameter is not available, then we use the value
> of Runtime.getRuntime().availableProcessors();
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]