Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何找到服务器可以处理的最大并发连接数?_Java_Sockets_Networking - Fatal编程技术网

Java 如何找到服务器可以处理的最大并发连接数?

Java 如何找到服务器可以处理的最大并发连接数?,java,sockets,networking,Java,Sockets,Networking,我想要一个java程序,它可以找到服务器可以处理的最大并发连接数 您可以假定服务器是http服务器 更清楚地说: 有很多开源NIO框架。我想为我的项目挑一个。并希望测试哪个实现支持最大数量的并发连接。其中一些框架声称它们支持这么多。但我想在选择之前自己验证一下 我的目的是支持尽可能多的并发连接,而不丢弃/拒绝客户端?只需创建套接字,直到出现错误“连接被拒绝”,或者程序将在new Socket()中阻塞,或者您获得5xx范围内的连接(通常503服务不可用) 请注意,您应该仅对内部测试执行此操作,因

我想要一个java程序,它可以找到服务器可以处理的最大并发连接数

您可以假定服务器是http服务器

更清楚地说:

有很多开源NIO框架。我想为我的项目挑一个。并希望测试哪个实现支持最大数量的并发连接。其中一些框架声称它们支持这么多。但我想在选择之前自己验证一下


我的目的是支持尽可能多的并发连接,而不丢弃/拒绝客户端?

只需创建套接字,直到出现错误“连接被拒绝”,或者程序将在
new Socket()
中阻塞,或者您获得5xx范围内的连接(通常503服务不可用)


请注意,您应该仅对内部测试执行此操作,因为这是一种拒绝服务攻击。

在apache tomcat中,最大连接存储在“context.xml”文件中

开始打开新连接;当你被新的拒绝时,你已经达到了某种极限

但是,结果无论如何都不准确

  • 服务器可能具有每个IP地址的限制
  • 服务器可以同时处理的连接数可能取决于服务器负载
  • 当您开始尽可能快地连接到服务器时,您可能会受到自己连接的限制
  • 某些服务器有自动规则禁止您(当在快照时间间隔内打开太多连接时,删除所有流量)
  • 此外,您的计算机的网络堆栈可能对传出连接有一些限制(尤其是Win XP曾经有过这样的限制)
  • 如果TCP连接通过任何一方的NAT,一些简单的设备(如SoHo类路由器可能会遇到其固有的限制-连接NAT表中的插槽等)

此外,您的测试相当于DoS攻击,因此必须获得服务器所有者和其他相关方(例如您的ISP、服务器主机的ISP等)的许可,并在开始此类测试之前通知他们。否则,您可能会发现自己将面临诉讼。

不久前,我们制作了一台COMET服务器,在测试它所能支持的最大连接数时遇到了巨大的困难。我们总是发现办公室网络设备在我们接近使其发出呻吟的连接数之前就出现了故障。机器上生成请求的端口数量有限,需要一段时间才能清除,然后才能重新使用。这确实是一个棘手的问题。

使用类似于执行服务器操作的工具。您需要在多台客户机上运行JMeter工具:正如其他人所提到的,各种操作系统对连接都有限制。它支持包括并发连接数等选项


上次使用此工具对一个网站进行负载测试时,我们有6台客户机在一台服务器上运行JMeter。该死的,这给了网络一记重击

嘻嘻。。“我想要一个Java程序”这个问题的答案很好+1不太可靠,因为有些服务器会将传入请求排队,而不会同时处理它们。诚然,关于“句柄”或“并发”的定义,这个问题并不十分清楚。将传入请求排队是处理它们的一种有效方法。但对于有限队列,您也可以测量它。在某一时刻,每台服务器都会断开连接。@m我想说的是,排队是否是“一种有效的处理方式”完全取决于“处理”的定义。就我个人而言,我不认为是这样。但是,由于问题还不清楚,我想我还是简单地加上这句话作为一个备注。根据您提供的有限描述,我建议您只分析配置文件:)那么您能添加一些详细信息吗?我相信服务器可以处理多个并发连接。在这种情况下,并发意味着什么?简单的连接,在这种情况下,数字可能相当高,但也没有意义。下载大文件?运行密集型查询?答案不是黑白分明的。你能提供更多关于你想测量什么的信息吗?你需要一组客户端来进行这样的测试。是的。。。还有更昂贵的路由设备和对TCP更好的理解,以找出哪些是坏的!您不能简单地在一台主机上使用多个IP地址来克服短暂端口范围的限制吗?然而,假设一个典型的Linux系统使用超过28000个端口(
cat/proc/sys/net/ipv4/ip_local_port_range
),我真的很想知道哪台comet服务器没有“达到让它呻吟的连接数”:)我们就在这个范围内。端口饥饿是我们遇到的问题之一,但主要问题是(便宜的)将测试挂在一起的路由器中缺少呼噜声。