2012-06-18 51 views
0

對於開發設備監控系統,我使用InetAdress isReachable方法來了解網絡中的設備是否在線。我正在使用ScheduledExecutorService以及設備列表來ping icmp設備同時。關於InetAddress「isReachable」方法

現在,如果設備數量很低(比如說60個設備)被ScheduledExecutorService ping爲10個線程池,那麼它工作正常。平均結果將正確顯示設備狀態。這裏的isReachable超時5000毫秒。 如果設備數量增加到80,即使設備在線,某些設備也會以isReachable方法顯示離線狀態。如果我將isReachable方法的時間增加到10000毫秒,則設備狀態可能有更好的機會正確的狀態。

從這些設備中,大多數設備都是基於Linux的系統,並且isReachable總是爲它們返回正確的狀態,但對於Windows而言,這種行爲是不可預知的。 我想確保網絡上的設備始終處於正確的狀態。也可以通過啓動一個java進程來查看聯機設備的退出值0。

對於e.g 「Process proc = new ProcessBuilder("ping", host).start();

因此,將勸告什麼專家?具有Process的設備的上述檢查狀態是否會比isReachable呼叫更好,更可靠?

回答

1

在子進程中運行ping不太可能使事情好轉;雖然在Java過程中負載較少,但您只需在一臺機器中移動它即可。 (此外,由於ICMP ECHO(標準化的ping核心)的作用方式,我不確定是否可以從一臺主機實時ping多臺機器。)您可能遇到的另一個問題是一臺機器可以響應ping而實際上並不是可用;我已經看到內核工作的機器(使其可以ping通),但是沒有工作的用戶進程,並且您可以輕鬆想象機器上特別有趣的服務正在關閉。 (另外,有些防火牆會阻止ping。)實際檢測每臺機器是否正在使用與該機器上運行的實際服務之間的某種無所謂的連接工作會更好。

如果您真的想追蹤大量機器的狀態,您應該使用專爲該任務設計的軟件(例如,Nagios)。這比012堆棧溢出ServerFault更多的問題...

+0

謝謝Donal,我會確認是否可以從一臺主機同時ping多臺機器。 –