2011-12-22 69 views
1

我写了java服务器应用程序,它可以同时接受3800-4000网络连接,并且cpu /网络负载很低(< 40%) 但是在此阈值之后它会拒绝新的连接或通过杀死旧的接受它,所以活连接计数约为3800-4000(数量不同)。服务器重置新连接,但CPU /网络负载低

任何人都可以给我至少一个提示什么可以是一个瓶颈在这里 - 我的软件本身,操作系统配置或CPU/NAT(不管他们说他们装载少于40%的事实)?

CPU:4核(一个内核被加载50%,其他3 - 25%) 环境:亚马逊EC2,Windows Server 2003的R2

编辑: 内存使用小于500 MB JRE是32bit,1.6.0_30 MaxUserPort设置为65534

+1

你看过你的内存使用情况了吗? – 2011-12-22 18:01:05

+0

哪个版本的Java? 32或64位体系结构? – 2011-12-22 18:03:18

+0

内存使用量小于500 Mb JRE是32bit,1.6.0_30 – Rage 2011-12-23 10:41:59

回答

0

我认为你受限于本地动态端口的数量,这是在win *上的4000附近。 Win *注册表中有许多参数也可以限制并发连接的数量。见列表this article

+0

感谢您的文章,但如果您的意思是[HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ Tcpip \ Parameters] MaxUserPort默认为5000 - 我已将它设置为65534启动服务器之前。我尝试了其他参数 - 但它没有改变整体结果 – Rage 2011-12-23 11:30:02

+0

我注意到你正在使用Java 1.6.0_30。您是否尝试通过VisualVM查看您的服务器?有什么有趣的吗? – mazaneicha 2011-12-23 16:31:41

0

它拒绝新的连接

正确的。一旦TCP积压队列被填充,将不会接受其他连接。 Windows将发出RST,其他平台将忽略传入的请求。在第一种情况下,客户会得到'连接被拒绝',在第二种情况下,客户会'连接超时'。

或者接受它杀掉旧

我从来没有见过,在超过20年的网络建设。导致你得出这个结论的症状是什么?

+0

我正在对我的服务器软件进行压力测试,并在客户端计算机上运行多个进程(每台服务器都有数百个连接到服务器)。当总连接数大约为3800,并且我运行新的客户端进程时,旧进程的线程数会减少。因此,我总结了服务器重置旧连接(死亡线程数量〜新进程中新创建线程的数量)。是的,我可能在这里错了,因为我没有看到任何连接相关的错误,只是线程数。 – Rage 2011-12-23 10:41:03

+0

其实我得到'连接重置',而不是'连接被拒绝'。 – Rage 2011-12-23 14:16:19