【问题标题】:Increase number of concurrent connections in tomcat 7增加tomcat 7中的并发连接数
【发布时间】:2012-09-18 00:37:00
【问题描述】:

想知道如何增加tomcat 7中的并发连接数。我做了一些研究,从apache文档中发现将值设置为acceptCount,maxConnections并增加maxThreads就可以了,但是尝试时,我只能提交1000 个请求中有 500 个请求。下面是我的来自 server.xml 文件的 sn-p -

      <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
       maxThreads="2000" acceptCount="1000" maxConnections="1000"
       scheme="https" secure="true"
       keystoreFile="certs/tomcat.keystore" keystorePass="xxxxxxxx"
       clientAuth="false" sslProtocol="TLS" server="Apache" />

你能帮我找出最好和最简单的方法来摆脱这个吗?

谢谢, 西里什。

【问题讨论】:

  • 你应该做一个线程转储来找出阻塞请求的原因,因为你已经配置了 2000 个线程(最大但不是最小,所以 Tomcat 需要在苍蝇)。但是,2000 个线程是巨大的,你确定需要这么多吗?
  • 嗨弗兰克,我只是想看看增加线程是否有任何不同,并且也知道这会导致内存问题。在这一点上,我想将服务器配置为接受尽可能多的连接,而不默认为 200 个线程(默认情况下由 tomcat 设置)。很想知道如何顺便做一个线程转储。?任何帮助是极大的赞赏。谢谢。!!
  • 要获取线程转储,您可以kill -3 PID(如果您使用的是 Unix;Windows 上有一个 Ctrl-something 组合可以达到相同的结果),它将在标准输出,或使用jstack PID &gt; threads.txt,jstack 是JDK 的一部分。即使你只有 200 个线程,如果它们都被并发请求使用,那么它将会是一个 long 读取来分析。

标签: java tomcat tomcat7


【解决方案1】:

创建大量线程1并接受大量请求并不意味着您的服务器将能够处理请求

如果您有 N 个线程并且只有 M 个物理处理器/内核,那么如果 M &gt;= N 每个线程将获得 1 个处理器,如果 M &lt; N 则平均获得 M / N 个处理器。假设您有 N 个请求,每个请求都在 1 个线程上运行,每个请求占用 R 秒的 CPU 时间。运行一个请求所花费的平均时间TT = Min(R, R * N / M) seconds。很明显,随着您增加 N(活动线程和活动请求的数量),每个单独请求的平均经过时间 T 会按比例增加。

除此之外,如果您有很多线程,它们都将使用内存,并且都将竞争访问共享数据结构......或数据库。所有这些额外的资源使用和争用都以各种方式增加了整个系统的开销。

所以,我怀疑正在发生的事情是,由于每个线程都试图同时处理请求,时间T 开始接近客户端或服务器端请求超时。 (请注意,调度程序的变幻莫测等意味着任何给定请求的实际时间可能少于或大大超过平均值。)当请求超时时,这反过来会降低获得请求的吞吐量已完成,因为对每个超时请求执行的工作(通常)被浪费了。


除非请求需要与慢速外部服务通信,否则我建议您将线程数减少到不超过 200 ... Tomcat 默认值2。我希望这将增加系统吞吐量。它不一定会让您处理在此期间发起的所有 1000 个请求,但我预测它会增加成功处理的请求数。

1 - 事实上,将线程数增加到 1000 并不意味着您将能够接受 1000 个请求。如果您有数百个线程处于 RUNNABLE 状态,则 Tomcat 的侦听器线程(调用 ServerSocket.accept() 的线程)很可能 CPU 不足,无法跟上请求到达率。

2 - 你需要对你的系统进行一些性能调整,但如果进一步减少它,我不会感到惊讶,甚至可以进一步改进。这将取决于您的硬件、您的应用程序和(我希望)您的后端数据库。

【讨论】:

  • 我同意@StephenC,我有生产中的应用程序(流量相当高),我们将最大线程数减少到 20,因为它们的响应速度足够快,并发处理的请求数是平均大约 1 或 2 个(通过 JMX 监控),当发生一些不好的事情(无响应的 Web 服务,异常长的 GC 暂停)时,我们不会突然有 200 个并发请求及其内存开销需要管理,这实际上会使情况恶化。存在上限是为了让应用程序不会耗尽资源,而不是限制吞吐量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-03
  • 2012-01-11
  • 2015-10-13
  • 1970-01-01
  • 2013-05-13
  • 2015-02-27
  • 1970-01-01
相关资源
最近更新 更多