Java 关于“地址”;isReachable“;方法
为了开发设备监控系统,我使用inetaddressJava 关于“地址”;isReachable“;方法,java,Java,为了开发设备监控系统,我使用inetaddressisReachable方法来了解网络中的设备是否在线。我使用ScheduledExecutorService以及设备列表来同时pingicmp设备 现在,如果要由ScheduledExecutorService使用10个线程池ping的设备数较低(例如60个设备),则它可以正常工作。这意味着结果将正确显示设备状态。此处isReachable的超时时间为5000毫秒。 如果设备数量增加到80,即使设备处于联机状态,某些设备也会使用isReachab
isReachable
方法来了解网络中的设备是否在线。我使用ScheduledExecutorService
以及设备列表来同时pingicmp
设备
现在,如果要由ScheduledExecutorService
使用10个线程池ping的设备数较低(例如60个设备),则它可以正常工作。这意味着结果将正确显示设备状态。此处isReachable
的超时时间为5000毫秒。
如果设备数量增加到80,即使设备处于联机状态,某些设备也会使用isReachable
方法显示脱机状态。如果我将isReachable
方法的超时时间增加到10000毫秒,则设备状态有更好的机会获得正确的状态
从这些设备来看,大多数设备都是基于Linux的系统,isReachable
始终为它们返回正确的状态,但对于Windows,其行为是不可预测的。
我希望确保网络上的设备始终处于正确状态。也可以通过启动java进程来查看在线设备的退出值0,这是一种替代机制
例如“processproc=newprocessbuilder(“ping”,host).start();
”
那么,专家们会给出什么建议呢?如上所述,具有
过程的设备的检查状态是否比isReachable
调用更好、更可靠 在子流程中运行ping不太可能使事情变得更好;虽然Java进程上的负载会减少,但您只是在一台机器内来回移动它。(此外,由于ICMP ECHO(ping的标准化核心)的工作方式,我不确定您是否可以从一台主机同时ping多台机器。)您可能遇到的另一个问题是,一台机器可以响应ping而实际上无法有效访问;我见过一些机器,其中内核正在工作(使其可ping),但没有工作的用户进程,您可以很容易地想象机器上特别有趣的服务正在关闭。(还有,一些防火墙会阻止ping。)最好实际检测每台机器是否使用某种与该机器上运行的实际服务的不做任何事情的连接工作
如果你真的想跟踪大量机器的状态,你应该考虑使用为任务设计的软件(例如Nagios)。这不仅仅是堆栈溢出的问题…谢谢Donal,我将确认是否可以从一台主机同时ping多台机器。