【发布时间】:2009-04-28 11:16:08
【问题描述】:
您好,我已经使用 java NIO 创建了一个套接字和客户端程序。 我的服务器和客户端在不同的计算机上,服务器有 LINUX 操作系统,客户端有 WINDOWS 操作系统。每当我在客户端上创建了 1024 个套接字时,我的客户端机器都支持,但在服务器中,我收到太多文件打开错误。 那么如何在服务器中打开 15000 个套接字而不会出现任何错误。 或者有没有其他方法可以同时连接15000个客户端?
谢谢 粑粑
【问题讨论】:
您好,我已经使用 java NIO 创建了一个套接字和客户端程序。 我的服务器和客户端在不同的计算机上,服务器有 LINUX 操作系统,客户端有 WINDOWS 操作系统。每当我在客户端上创建了 1024 个套接字时,我的客户端机器都支持,但在服务器中,我收到太多文件打开错误。 那么如何在服务器中打开 15000 个套接字而不会出现任何错误。 或者有没有其他方法可以同时连接15000个客户端?
谢谢 粑粑
【问题讨论】:
好的,质疑他为什么需要 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
【讨论】:
为什么需要在一台机器上拥有 15000 个套接字?反正看ulimit-n
【讨论】:
如果您将有 15,000 个客户端与您的服务器通信(根据您的 cmets,未来可能有 200,000 个),那么我怀疑一旦连接这些客户端(如果它们连接)。
我认为您可能需要退后一步,看看如何构建您的应用程序和/或部署以成功实现这些数字。
【讨论】: