为了开发设备监控系统,我正在使用InetAdress isReachable方法来了解网络中的设备是否在线。我正在使用ScheduledExecutorService和设备列表来同时ping icmp设备。
现在,如果设备数量较少(例如60个设备),则ScheduledExecutorService将使用10个线程池对其执行pinged操作,结果将正确显示设备status.Here fine..Means isReachable的超时时间为5000 ms。如果设备数量增加到80,一些设备使用isReachable方法显示脱机状态,即使设备是online.If I将time out of isReachable方法增加到10000 ms,设备状态也有更好的机会具有正确的状态。
从这些设备中,大多数设备都是基于Linux的系统,isReachable总是为它们返回正确的状态,但对于Windows,这种行为是不可预测的。我希望确保网络中设备的状态始终正确。还可以有一种替代机制,通过启动java进程来查看在线设备的退出值0。
例如"Process proc = new ProcessBuilder("ping", host).start();“
那么,哪些专家会给出建议呢?如上所述,对具有Process的设备的检查状态会比isReachable呼叫更好更可靠吗?
发布于 2012-06-18 17:18:11
在子进程中运行ping不太可能使事情变得更好;虽然Java进程上的负载会更少,但您只是在一台机器中转移它。(此外,由于ICMP ECHO - ping的标准化核心-的工作方式,我不确定您是否可以从一台主机同时ping多台机器。)您可能会遇到的另一个问题是,机器可能会响应ping,但实际上并不能有效地访问;我见过内核正在工作(使其可ping通)但没有工作的用户进程的机器,您可以很容易地想象机器上特定有趣的服务正在关闭。(此外,某些防火墙会阻止ping。)更好的做法是实际检测每台机器是否都在使用某种到该机器上运行的实际服务的不做任何事情的连接。
如果你真的想跟踪大量机器的状态,你应该考虑使用为该任务设计的软件(例如,Nagios)。与堆栈溢出…相比,这对ServerFault来说更是一个问题
https://stackoverflow.com/questions/11079646
复制相似问题