【问题标题】:Too Many Files Open error in java NIOjava NIO中的文件打开过多错误
【发布时间】:2009-04-28 11:16:08
【问题描述】:

您好,我已经使用 java NIO 创建了一个套接字和客户端程序。 我的服务器和客户端在不同的计算机上,服务器有 LINUX 操作系统,客户端有 WINDOWS 操作系统。每当我在客户端上创建了 1024 个套接字时,我的客户端机器都支持,但在服务器中,我收到太多文件打开错误。 那么如何在服务器中打开 15000 个套接字而不会出现任何错误。 或者有没有其他方法可以同时连接15000个客户端?

谢谢 粑粑

【问题讨论】:

    标签: java sockets


    【解决方案1】:

    好的,质疑他为什么需要 15K 套接字是一个单独的讨论。

    答案是你达到了用户的文件描述符限制。

    使用您将在侦听器中使用的用户登录并执行 $ulimit -n 以查看当前限制。

    很可能是 1024。

    使用root编辑文件/etc/security/limits.conf

    并设置->

    {username} soft nofile 65536
    {username} hard nofile 65536
    

    65536 只是一个建议,您需要从您的应用中弄清楚。

    注销,重新登录并使用 ulimit -n 重新检查,看看它是否有效。

    您可能需要超过 15 个 fds 才能完成所有这些操作。使用 lsof 监控您的应用。

    像这样:

    $lsof -p {pid}   <- lists all file descriptors
    $lsof -p {pid}  | wc -l    <- count them
    

    顺便说一句,你可能也达到了系统范围的 fd 限制,所以你需要检查一下:

    $cat /proc/sys/fs/file-max
    

    要增加这一行,请将此行添加到 /etc/sysctl.conf

    #Maximum number of open FDs
    fs.file-max = 65535
    

    【讨论】:

      【解决方案2】:

      为什么需要在一台机器上拥有 15000 个套接字?反正看ulimit-n

      【讨论】:

      • 谢谢 Matthew Flaschen,ulimit -n 给了我 1024。这是什么意思。另外,如何同时连接到 15000 个客户端。谢谢,巴皮
      • man ulimit。如果在启动服务器之前执行 ulimit -n 20000 ,将允许该进程打开更多文件。
      • (在同一个 shell /start 脚本中)
      • 谢谢Karlp,能否请您提一下在Linux OS 中可以打开的最大文件是多少。是否支持打开200000个文件?
      • 如果要查找系统范围的限制,请查看特殊文件 /proc/sys/fs/file-max 。你也可以修改它。但是,我同意您不应该无故修改这些限制。构建(更多机器)比构建(试图让一台机器做更多事情)更好并且通常更便宜。
      【解决方案3】:

      如果您将有 15,000 个客户端与您的服务器通信(根据您的 cmets,未来可能有 200,000 个),那么我怀疑一旦连接这些客户端(如果它们连接)。

      我认为您可能需要退后一步,看看如何构建您的应用程序和/或部署以成功实现这些数字。

      【讨论】:

      • 嗨,布赖恩,感谢您的信息。请您指导我如何在不创建那么多客户端的情况下创建超过 15000 个连接
      • 不在评论区。我认为您可能必须根据应用程序所需的功能开始谷歌搜索。祝你好运
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-03
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多