java - java NIO 中打开文件过多错误

标签 java sockets

嗨,我使用 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 个 fd 才能完成所有这些操作。使用 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

关于java - java NIO 中打开文件过多错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/797375/

相关文章:

java - 自定义 jsr validator 中的 Autowiring

java - Spring:可以有两个上下文——Web 和后端吗?

服务器端的 C++ TCP 套接字多次写入()在客户端被视为单次读取

c# - 怎么比较ip地址

c# - 使用套接字下载网站

java - 通过 Netbeans 自动生成的代码在 Java 中的 JFrame 背景中设置图像

java - 多个 GUI 对象的最佳实践

image - 通过socket.recv()在python中通过tcp/ip接收损坏的图像

java - 类是否应该负责检查是否已创建可行的对象?如果是这样怎么办?

ruby - 使用 Ruby 创建二进制数据?