日期:2014-05-20  浏览次数:20628 次

java服务器能接收的最大客户端连接数?
编了个服务器程序,2个线程实现。第一个线程为监听线程,把连接的客户端socket的输入流放入一个“数组”里;第二个线程
无阻塞的读取这个“数组”里的所有输入流。

把java虚拟机的内存设置为500M---700M,
1. 服务器连接2500个客户端socket后(3台电脑实现来产生2500个客户端socket),任务管理器查看进程javaw.exe(发现使用cpu时间片45左右,内存212M左右,并且长时间稳定在这个数值)。运行半个小时后陆续出现socket断开现象。
2. 服务器连接1500个客户端socket(3台电脑实现来产生1500个客户端socket),任务管理器查看进程javaw.exe(发现使用cpu时间片45左右,内存190M左右,并且长时间稳定在这个数值)。运行半个小时后陆续出现socket断开现象。

请问java实现的服务器能够连接的最大客户端Socket数量是多少啊?
有没有什么办法能把最大连接数提高到1万个啊?

------解决方案--------------------
你的服务器端是你写的吧?
那么连接数的限制大多取决于你的实现算法和配置的运行时的内存,
还有OS环境决定的。
------解决方案--------------------
Java支持的Socket最大连接数,存在两种限制:
1、服务线程数,如果你用传统IO模型的话;那么建议改为NIO;
2、受操作系统的 FileHandler 的限制,也就是文件句柄数。
------解决方案--------------------
最大连接数,受操作系统的限制。
不同操作系统,限制不同。
有的时候,是因为操作系统,未分页的内存容量不够,引起的,扩充该容量,可以缓解连接的数量。

不过,连接过多,服务器的负载也会加重,一般服务器,两千左右的连接,已经很强劲了。

还有,楼主的那个CPU的使用率,估计是双核CPU吧(或者多于双核),单核应该是满载的。

光维持连接还不够,正常的服务器,是要处理连接交互的数据的,所以,负载问题,才是重中之重啊。
------解决方案--------------------
http://support.microsoft.com/kb/327699/zh-cn

在 Windows XP 中每个进程的 NT User 句柄数最多为 10,000


换服务器版本的Windows吧。