不幸的是,您没有提供有关服务器性质的更多详细信息。我想你正在写一个典型的TCP服务器。在这个答案中,我将而不是谈论任何Java特定的细节。
简短的建议是:在客户端连接之间插入延迟。没有它,您正在主动模拟针对您的服务器的DoS攻击。
对于更长的一个,请阅读下面。
通常一个TCP服务器创建仅1 听通过调用(在可爱的C接口)int sockfd = socket(...)
功能,并传递结果(sockfd
在我们的例子),以bind()
和listen()
功能停飞。在完成这些准备工作之后,服务器会调用一个accept()
,这将使服务器瘫痪(如果套接字被标记为阻塞),并且地球另一端的客户端将开始调用connect()
函数,而不是accept()
(在服务器上方)在OS内核的支持下将创建连接的套接字。
通过查看listen()
函数,可能会发现未决连接的实际数量。 listen()
有积压参数定义了连接的最大数量OS内核应该排队到套接字(这基本上是SYN_RCVD
和ESTABLISHED
状态中的所有连接的总和)。从历史上看,1980年代积压的建议值是5,这在我们的日子里显然是很悲惨的。在FreeBSD 7中。2,例如,用于积压一个硬限制可以通过键入猜到:
% sysctl kern.ipc.somaxconn
kern.ipc.somaxconn: 128
和Fedora 10中:
% cat /proc/sys/net/core/somaxconn
128
P.S.
对不起,我可怕的英语。
我明白你想说什么....实际上,这就是我所做的。问题仍然存在,我无法在大量的客户端上测试我的服务器,只是因为我最终得到了一个错误。 – 2009-07-03 11:55:34