当前位置: 首页 > 面试题库 >

决定同时连接数量的因素

易衡
2023-03-14
问题内容

在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秒。


问题答案:

有趣的问题是,如果我们最终不考虑所有性能决定属性,那么最终可以归结为您在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

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



 类似资料:
  • 在JavaServlet环境中,哪些因素是同时用户数量的瓶颈。 服务器每个端口允许的HTTP连接数 还有其他因素吗? 编辑:为了不考虑业务逻辑,假设只有一个servlet在Log4j上打印一行。 我的Tomcat服务器能同时处理6000个HTTP连接吗?为什么不呢(文件处理?每个请求的CPU时间?) 为每个连接生成的垃圾量是否会产生影响?例如,如果Tomcat为每个HTTP连接创建并留下20KB的

  • std::thread::hardware_concurrency()在新版C++标准库中是一个很有用的函数。这个函数将返回能同时并发在一个程序中的线程数量。例如,多核系统中,返回值可以是CPU核芯的数量。返回值也仅仅是一个提示,当系统信息无法获取时,函数也会返回0。但是,这也无法掩盖这个函数对启动线程数量的帮助。 清单2.8实现了一个并行版的std::accumulate。代码中将整体工作拆分成

  • 在开始之前,我想说我已经检查了以下内容,但它们没有帮助我: HikariCP连接错误 HikariCP-连接不可用 https://github.com/brettwooldridge/HikariCP/issues/104 基本上,我得到了一个HikariCP stracktrace,我不知道是什么引起的。 我尝试更改,,并且我还启用了(在2s)。这些都没有帮助,除了我每次执行查询时都会得到泄漏

  • 我正在对一个拥有7000万行和25个数字特征的训练集使用R内部的< code>H2O库来尝试一个随机森林分类模型。总文件大小为5.6 GB。 验证文件的大小为 1 GB。 我的系统上有16 GB RAM和8核CPU。 系统成功读取H2O对象中的两个文件。 然后我发出以下命令来构建模型: 但是几分钟后(没有生成任何树),我得到以下错误: "在. h2o.doSafeREST(conn = conn,

  • 限制用户账户的同时使用 Isaac是一家无线互联网服务提供商(WISP),他的收入取决于拥有尽可能多的用户,因为他每月收费。 爱丽丝是他的客户。 她给住在隔壁的鲍勃提供了她的证书(账户密码),所以他们都在同一时间连接无线网络。 Isaac需要结束这一点,否则他将不得不关闭他的WISP并编写HTML代码作为食物! 行动时刻 - 限制用户账户的同时使用 在sites-enabled/default文件

  • 由于端口号是16位,在任何给定时间,单个Linux盒上最多只能有65536个端口。而TCP/IP需要一个端口号才能与外界对话。1)当客户机建立连接时,选择临时端口号。2)当监听套接字的服务器接受连接时,分配端口号。 因此,根据我的理解,在任何给定时间,给定机器上只能存在最多65536个TCP/IP连接。 那么,为什么有些或大多数负载均衡器要求20万个或更多的并发连接呢?