一尘不染

决定同时连接数量的因素

java

在Java Servlet环境中,什么因素是并发用户数量的瓶颈。

  1. 服务器每个端口可以允许的HTTP连接数
  2. 服务器可以跨多个端口允许的HTTP连接数(我可以在多个HTTP端口上具有多个WAS配置文件)
  3. 池中的servlet数量
  4. 为WAS配置用于服务连接的线程数
  5. 服务器可用的RAM(假设应用程序内存为0,服务线程数之间是否有任何关联)

还有其他因素吗?

编辑:为了避免出现业务逻辑,假设只有一个Servlet在Log4j上打印一行。

  • 我的Tomcat服务器可以同时处理6000个HTTP连接吗?为什么不这样做(文件句柄?每个请求的CPU时间?)?
  • 我可以将线程池​​的大小设置为5000(空闲线程是否花费CPU / RAM)?
  • 我可以将oracle连接池的大小设置为500个连接(空闲连接是否花费CPU / RAM)?

每个连接生成的垃圾量是否有影响?例如,如果为每个HTTP连接创建了20KB的对象,并由Tomcat留下了该对象。那么到处理2500个请求时,将使用100MB堆,这可能会触发300ms的GC暂停。

我们可以这样说吗:如果Tomcat使用0.2秒的CPU时间来处理单个HTTP请求,那么它将能够在一秒钟内处理大约500个http连接。因此,6000个连接将需要5秒。


阅读 159

收藏
2020-12-03

共1个答案

一尘不染

有趣的问题是,如果我们最终不考虑所有性能决定属性,那么最终可以归结为您在Servlet中正在进行多少工作,或者如果I /
O,CPU和内存最高,则需要花费多少时间。现在,让我们在考虑以上声明的情况下向下移动列表;-

服务器每个端口可以允许的HTTP连接数

文件描述符有限制,但是该限制再次由servlet完成一个请求的时间或从请求接收第一个字节到完成发送整个响应所花费的时间触发。因为如果仅花费1毫秒并且您正在使用Netty和持久连接,则可以达到很高的>>
6000。

池中的servlet数量

理论上是>>6000。但是有多少线程正在处理您的请求?是否存在正在燃烧您的请求的线程池?因此,您想增加线程,但是多少可以说2000个并发线程。您的CPU在上下文切换方面表现不佳吗?是否受I
/ O约束?如果是的话,上下文切换是有意义的,但是您将达到那些网络限制,因为大量线程在等待网络I / O,因此最终要花多少时间在一件工作上。

D B

如果它甲骨文,祝福您连接管理,那么您肯定需要在这里进行严格的监视。现在,这只是另一个限制因素,可以视为另一个阻塞I / O。根据I /
O的定义,延迟/吞吐量比起最小的工作要大,并且成为瓶颈。

因此,最后,您需要分解所有servlet的以下或更多属性

  1. 是否受CPU限制?如果是,则花费多少个周期,或者可以安全地将其转换为某个时间单位。例如1ms,仅用于计算工作。
  2. 是否受I / O约束,如果是,则类似地找到该单元。
  3. 和别的
  4. 一长串您拥有的东西,例如CPU,内存,GB / s

现在您知道需要完成多少工作,而您所要做的就是除以所拥有的并继续进行调整,这样您就可以找到最佳选择,还可以找到您尚未考虑的其他属性,并加以考虑。

2020-12-03