0

为了开发设备监控系统,我使用 InetAdressisReachable方法来了解网络中的设备是否在线。我正在使用ScheduledExecutorService设备列表同时 pingicmp设备。

现在,如果要使用 10 个线程池 ping 的设备数量较低(例如 60 个设备)ScheduledExecutorService,它工作正常。意味着结果将正确显示设备状态。这里isReachable有 5000 毫秒的时间。如果设备数量增加到 80,isReachable即使设备在线,某些设备也会显示离线状态。如果我将isReachable方法超时时间增加到 10000 毫秒,设备状态就有更好的机会获得正确的状态。

从这些设备中,大多数设备都是基于 Linux 的系统,并且isReachable总是为它们返回正确的状态,但对于 Windows,行为是不可预测的。我想确保网络上的设备始终处于正确状态。还可以通过启动 java 进程来查看在线设备的退出值 0 来替代机制。

例如“ Process proc = new ProcessBuilder("ping", host).start();

那么,有哪些专家会给出建议呢?具有上述 a 的设备的检查状态Process会比isReachablecall 更好和可靠吗?

4

1 回答 1

1

在子进程中运行 ping 不太可能使事情变得更好;虽然 Java 进程的负载会减少,但您只是在一台机器内移动它。(此外,由于 ICMP ECHO(ping 的标准化核心)的工作方式,我不确定您是否真的可以从一台主机一次 ping 多台机器。)您可能遇到的另一个问题是一台机器可以响应 ping 而实际上没有用处可达;我见过内核工作的机器(使其可 ping 通)但没有工作的用户进程,你可以很容易地想象机器上特别有趣的服务正在关闭。(此外,一些防火墙会阻止 ping。)最好实际检测每台机器是否正在使用某种无操作连接到该机器上运行的真实服务。

如果您真的想跟踪大量机器的状态,您应该考虑使用为该任务设计的软件(例如,Nagios)。对于ServerFault而言,这比 Stack Overflow 更像是一个问题……</p>

于 2012-06-18T09:18:10.577 回答