为了开发设备监控系统,我使用InetAdress isReachable
方法来了解网络中的设备是否在线。我正在使用ScheduledExecutorService
以及设备列表来ping同时使用icmp
设备。
现在,如果设备号为低(例如60个设备)由ScheduledExecutorService
用10个线程池进行ping操作,则可以正常工作。结果将正确显示设备状态。这是{{1有超过5000毫秒的时间。
如果设备编号增加到80,则即使设备处于联机状态,某些设备也会使用isReachable
方法显示离线状态。如果我将isReachable
方法的时间增加到10000毫秒,则设备状态可以有更好的机会获得正确的地位。
从这些设备中,大多数设备都是基于Linux的系统,isReachable
始终为它们返回正确的状态,但对于Windows,行为是不可预测的。
我想确保网络上的设备始终处于正确状态。通过启动java进程来查看在线设备的退出值0,还可以有另一种机制。
例如“isReachable
”
那么,专家会建议什么?上述Process proc = new ProcessBuilder("ping", host).start();
设备的检查状态是否会比Process
呼叫更好,更可靠?
答案 0 :(得分:1)
在子进程中运行ping不太可能使事情变得更好;虽然Java进程的负载会减少,但你只需在一台机器上进行转换。 (此外,我不确定你是否可以从一个主机同时ping多台机器,因为ICMP ECHO - ping的标准化核心 - 的工作方式。)你可能遇到的另一个问题是一台机器可以响应ping而不实际有用可达;我已经看到了内核工作的机器(使其可以ping通),但是没有正常工作的用户进程,你可以很容易地想象机器上的特定有趣服务正在关闭。 (此外,一些防火墙会阻止ping。)实际检测每台机器是否正在使用与该机器上运行的实际服务之间的某种无操作连接,这样做要好得多。
如果您真的想要跟踪大量机器的状态,您应该考虑使用专为此任务设计的软件(例如,Nagios)。对于ServerFault而言,这比Stack Overflow更具问题......