扫描 IP 范围时的 JRuby-1.7.19 UDPSocket "initialize: name or service not known"
JRuby-1.7.19 UDPSocket "initialize: name or service not known" while scanning IP range
在我的编程中,我正在扫描响应 snmp 的设备的 IP 范围。我正在遍历 IP 地址列表并将每个地址放入它自己的线程并使用 ruby gem snmp 来测试设备是否响应 snmp。
主程序执行线程并用 java 编写,网络由 jruby jar 处理。我正在使用 10 个线程的线程池。我在前几个线程 运行 之后,当他们尝试设置 jruby UDPSocket 时,我开始在几个线程上获得 "SocketError: initialize: name or service not known"。它甚至在我知道启用了 snmp 的 IP 地址上显示错误。我深入研究了 UDPSocket 的 jruby 实现,它使用线程安全的 DatagramChannel class。我不太确定是什么原因造成的,似乎我只是在建立这么多 UDP 连接时才大声说话,我不确定这是否属实。
我们最终确实找出了问题所在。事实证明这根本不是 JRuby 问题。在扫描 IP 范围时,我们发现 JVM 中可以打开的数据报端口数量有限。那是我们达到的极限。我相信有增加此限制的命令,但我无法找到它。
在我的编程中,我正在扫描响应 snmp 的设备的 IP 范围。我正在遍历 IP 地址列表并将每个地址放入它自己的线程并使用 ruby gem snmp 来测试设备是否响应 snmp。
主程序执行线程并用 java 编写,网络由 jruby jar 处理。我正在使用 10 个线程的线程池。我在前几个线程 运行 之后,当他们尝试设置 jruby UDPSocket 时,我开始在几个线程上获得 "SocketError: initialize: name or service not known"。它甚至在我知道启用了 snmp 的 IP 地址上显示错误。我深入研究了 UDPSocket 的 jruby 实现,它使用线程安全的 DatagramChannel class。我不太确定是什么原因造成的,似乎我只是在建立这么多 UDP 连接时才大声说话,我不确定这是否属实。
我们最终确实找出了问题所在。事实证明这根本不是 JRuby 问题。在扫描 IP 范围时,我们发现 JVM 中可以打开的数据报端口数量有限。那是我们达到的极限。我相信有增加此限制的命令,但我无法找到它。