文件太多在java NIO中打开错误

时间:2009-04-28 11:16:09

标签: java sockets

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

由于 BAPI

3 个答案:

答案 0 :(得分:6)

好的,质疑他为什么需要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

答案 1 :(得分:3)

为什么一台机器上需要15000个插槽?无论如何,请看ulimit -n

答案 2 :(得分:1)

如果您将有15,000个客户端与您的服务器通信(根据您的意见,未来可能会有200,000个客户端),那么我怀疑您在连接后为这些客户端提供可扩展性问题(如果他们连接)。

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