JBoss EAP 6.3 Http 连接器设置
JBoss EAP 6.3 Http Connector Settings
我研究 Google 已经有一段时间了,以了解服务器如何接受 http 请求并处理它们。如果我理解正确的话,端口 8080 上应该有一个监听器,它始终监听传入的 http 请求,并且一旦它收到请求,它应该能够创建一个线程并将工作委托给该线程。
根据以上知识,我想了解的是在设置 http-connector 时什么是 max-connections 和 max-threads。另外,如果我们没有明确指定这些,那么最大值是多少?
<subsystem xmlns="urn:jboss:domain:web:2.1" default-virtual-server="default-host" native="false">
<connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
<virtual-server name="default-host" enable-welcome-root="true">
<alias name="localhost"/>
<alias name="example.com"/>
</virtual-server>
</subsystem>
非常具体,这里是我的项目符号形式的问题:
- 是 max-connection=可以并发处理 http 请求的最大 http 侦听器吗?
- 是 max-threads=在 http 侦听器用来委托工作的内部线程池中创建的最大线程数吗?
- 使用上面提到的默认 http 连接器设置,max-connections 和 max-threads 的默认值是多少
- 设置最大连接数和最大线程数的决定因素是什么,是否取决于处理器数量和可用内存?
谢谢!
max-connections: 服务器在任何给定时间将接受和处理的最大连接数。
如果 max-connections 属性没有在 standalone-(*) 的 web 子系统连接器上设置。xml / domain.xml,默认计算为:
512 * Runtime.getRuntime().availableProcessors() //for default Java connector
32 * Runtime.getRuntime().availableProcessors() //for native APR connector addon
max-threads:这个Connector要创建的请求处理线程的最大数量,因此决定了可以同时处理的最大请求数。
EAP 6.x:
/**
* Maximum amount of worker threads.
*/
protected int maxThreads = (org.apache.tomcat.util.Constants.LOW_MEMORY) ? 64 : ((Constants.MAX_THREADS == -1) ? 512 * Runtime.getRuntime().availableProcessors() : Constants.MAX_THREADS);
public void setMaxThreads(int maxThreads) { this.maxThreads = maxThreads; }
public int getMaxThreads() { return maxThreads; }
EAP 6.x 带有本机组件:
/**
* Maximum amount of worker threads.
*/
protected int maxThreads = (org.apache.tomcat.util.Constants.LOW_MEMORY) ? 32 : ((Constants.MAX_THREADS == -1) ? 32 * Runtime.getRuntime().availableProcessors() : Constants.MAX_THREADS);
public void setMaxThreads(int maxThreads) { this.maxThreads = maxThreads; }
public int getMaxThreads() { return maxThreads; }
我相信两者是一样的。我从未使用过 max-connections 属性。每当需要自定义最大线程数时,我都会创建单独的线程工厂和线程池。有关详细信息,请参阅:
redhat doc,
我研究 Google 已经有一段时间了,以了解服务器如何接受 http 请求并处理它们。如果我理解正确的话,端口 8080 上应该有一个监听器,它始终监听传入的 http 请求,并且一旦它收到请求,它应该能够创建一个线程并将工作委托给该线程。
根据以上知识,我想了解的是在设置 http-connector 时什么是 max-connections 和 max-threads。另外,如果我们没有明确指定这些,那么最大值是多少?
<subsystem xmlns="urn:jboss:domain:web:2.1" default-virtual-server="default-host" native="false">
<connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
<virtual-server name="default-host" enable-welcome-root="true">
<alias name="localhost"/>
<alias name="example.com"/>
</virtual-server>
</subsystem>
非常具体,这里是我的项目符号形式的问题:
- 是 max-connection=可以并发处理 http 请求的最大 http 侦听器吗?
- 是 max-threads=在 http 侦听器用来委托工作的内部线程池中创建的最大线程数吗?
- 使用上面提到的默认 http 连接器设置,max-connections 和 max-threads 的默认值是多少
- 设置最大连接数和最大线程数的决定因素是什么,是否取决于处理器数量和可用内存?
谢谢!
max-connections: 服务器在任何给定时间将接受和处理的最大连接数。
如果 max-connections 属性没有在 standalone-(*) 的 web 子系统连接器上设置。xml / domain.xml,默认计算为:
512 * Runtime.getRuntime().availableProcessors() //for default Java connector
32 * Runtime.getRuntime().availableProcessors() //for native APR connector addon
max-threads:这个Connector要创建的请求处理线程的最大数量,因此决定了可以同时处理的最大请求数。
EAP 6.x:
/**
* Maximum amount of worker threads.
*/
protected int maxThreads = (org.apache.tomcat.util.Constants.LOW_MEMORY) ? 64 : ((Constants.MAX_THREADS == -1) ? 512 * Runtime.getRuntime().availableProcessors() : Constants.MAX_THREADS);
public void setMaxThreads(int maxThreads) { this.maxThreads = maxThreads; }
public int getMaxThreads() { return maxThreads; }
EAP 6.x 带有本机组件:
/**
* Maximum amount of worker threads.
*/
protected int maxThreads = (org.apache.tomcat.util.Constants.LOW_MEMORY) ? 32 : ((Constants.MAX_THREADS == -1) ? 32 * Runtime.getRuntime().availableProcessors() : Constants.MAX_THREADS);
public void setMaxThreads(int maxThreads) { this.maxThreads = maxThreads; }
public int getMaxThreads() { return maxThreads; }
我相信两者是一样的。我从未使用过 max-connections 属性。每当需要自定义最大线程数时,我都会创建单独的线程工厂和线程池。有关详细信息,请参阅:
redhat doc,