编了个服务器程序,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万个啊?

解决方案 »

  1.   

    配置及运行环境我都已经提到了,不是问题的所在。而且我已经测出了1000个socket跑10个小时都没有问题。
      

  2.   

    Java支持的Socket最大连接数,存在两种限制:
    1、服务线程数,如果你用传统IO模型的话;那么建议改为NIO;
    2、受操作系统的 FileHandler 的限制,也就是文件句柄数。
      

  3.   

    最大连接数,受操作系统的限制。
    不同操作系统,限制不同。
    有的时候,是因为操作系统,未分页的内存容量不够,引起的,扩充该容量,可以缓解连接的数量。不过,连接过多,服务器的负载也会加重,一般服务器,两千左右的连接,已经很强劲了。还有,楼主的那个CPU的使用率,估计是双核CPU吧(或者多于双核),单核应该是满载的。光维持连接还不够,正常的服务器,是要处理连接交互的数据的,所以,负载问题,才是重中之重啊。
      

  4.   

    http://support.microsoft.com/kb/327699/zh-cn在 Windows XP 中每个进程的 NT User 句柄数最多为 10,000
    换服务器版本的Windows吧。