当前位置: 首页 > 知识库问答 >
问题:

奇怪的Tomcat中断,可能与maxConnections有关

常光明
2023-03-14

我们使用的是tomcat7,maxthreads=“200”和maxconnections=10000。我们在主存之外提供所有数据,因此每个HTTP请求完成得非常快,但我们有大量用户在进行非常简单的交互(这是高中主题选择)。但是,我们似乎不太可能有10,000个用户同时打开他们的浏览器在我们的页面上。

我的问题有几个部分:

  • 可能是“maxconnections”参数导致了我们的问题吗?
  • 有什么理由不将“maxconnections”设置为一个高得离谱的值,例如100,000?(例如,这样做的代价是什么?)
  • tomcat一旦击中“maxconnections”消息,是否会在任何地方输出警告消息?(我们什么也没注意到)。
  • 我们有可能遇到操作系统限制吗?我们使用的是Centos6.4(Linux),“ulimit-f”表示“无限”。(防火墙理解TCP/IP连接的概念吗?其他地方会有限制吗?)
  • 当tomcat达到“maxconnections”限制时会发生什么?它是否尝试关闭一些不活动的连接?如果没有,为什么不呢?我不喜欢这样的想法,即我们的服务器可能会被安装浏览器的人勒索,并发送Keep-Alive以保持连接打开。
    null

更多信息:当我们意识到我们使用的是BIO的默认Tomcat7设置时,看起来我们真的解决了这个问题,该设置每个连接有一个线程,并且我们的MaxThreads=200。实际上,'netstat-an'显示了大约297个连接,这与200多个队列100个匹配。因此我们将其更改为NIO,并重新启动Tomcat。不幸的是,第二天发生了同样的问题。我们可能错误地配置了server.xml。

更多信息:我做了一个负载测试。我能够从我的开发笔记本电脑上创建500个连接,并在每个上做3次HTTP获取,没有任何问题。除非我的负载测试无效(Java类也在上面的链接中)。

共有1个答案

夏景胜
2023-03-14

如果没有动手调试,很难确定,但我首先检查的内容之一是文件描述符限制(即ulimit-n)。TCP连接使用文件描述符,根据使用的实现,使用selectablechannel进行轮询的nio连接可能会在每个打开的套接字中使用多个文件描述符。

检查这是否是原因:

  • 使用ps
  • 查找Tomcat pid
  • 检查ulimit进程运行的条件:cat/proc/ /limits fgrep'open files'
  • 检查实际使用的描述符数:ls/proc/ /fd wc-l
 类似资料:
  • 实际上,这不是一个问题,而是一个奇怪的事情,我想理解。我将SpringBoot2与嵌入的Tomcat一起使用。我还添加了自签名SSL证书。这是非常常见的配置: 我制作了一个连接器,强制HTTP->https重定向,就像在许多示例中一样: 如果我不在配置中指定server.port属性,我将看到以下错误: 说明: 配置为侦听端口8080的Tomcat连接器启动失败。端口可能已经在使用中,或者连接器可

  • 这是个模糊的问题。因此,请随时询问任何具体数据。 我们有一个tomcat服务器,运行两个web服务。一个tomcat使用spring构建。90%的任务使用mysql,JSON缓存使用mongo(10%)。另一个web服务是使用grails编写的。这两项服务都是中等大小的代码库(每项约35k行代码) 计算仅在有HTTP请求(无批处理)时发生。每个请求大约有2000个数据库点击率(我知道它非常庞大,我

  • 一个js转义问题 这是在浏览器的控制台,为什么为出现这种结果,如果要输出'a\b\c\d'这样,请问题如何写

  • 也许有人能解释以下行为--希望能找到可行的解决办法...多谢了。 有什么想法吗?

  • 我在包上收到以下编译器错误: 包com.core.cronjob.mapping; 错误 : 内部编译器错误: java.lang.非法描述异常: 信息不能为空在组织.eclipse.jdt.内部.编译器.codegen.StackMapFrame.addStackItem(堆栈映射帧.java:81) 我不认为这是代码。我正在使用蚂蚁1.9.4来构建项目和Eclips Mars.1版本。(4.5

  • 我有一个ui显示的数据表:repeat。因为我希望用户能够在每行的基础上更改数据,所以每行都包含在一个h:form中。最后,每个h:form都有一个带有f:ajax标记的按钮。我的行为越来越不一致。 上述方法可行,但带宽显然不便宜。 如果我将render=“@all”更改为render=“@form”,Firebug显示发送的部分响应正常,但我的浏览器(Firefox)神秘地没有显示它。所以我猜它