0

デバイス監視システムを開発するために、InetAdressisReachableメソッドを使用して、ネットワーク内のデバイスがオンラインかどうかを確認しています。デバイスScheduledExecutorServiceのリストと共に使用して、icmpデバイスに同時に ping を実行しています。

10 スレッドのプールでping を実行するデバイス数が少ない場合 (たとえば 60 デバイス) ScheduledExecutorService、問題なく動作します。結果はデバイスの状態を正しく表示します。ここでisReachableは、5000 ミリ秒のタイムアウトがあります。デバイスの数がたとえば 80 に増えるとisReachable、デバイスがオンラインであっても、一部のデバイスはメソッドでオフライン ステータスを表示します。メソッドのタイムアウトisReachableを 10000 ミリ秒に増やすと、デバイスのステータスが正しいステータスになる可能性が高くなります。

これらのデバイスから、ほとんどのデバイスは Linux ベースのシステムであり、isReachable常に正しいステータスを返しますが、Windows の場合、動作は予測できません。ネットワーク上のデバイスの正しいステータスを常に確認したいと考えています。Java プロセスを開始して、オンライン デバイスの終了値 0 を確認する代替メカニズムも存在する可能性があります。

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

それで、どの専門家がアドバイスしますか?上記のデバイスのステータス確認は、コールProcessよりも信頼性が高くなりますか?isReachable

4

1 に答える 1

1

サブプロセスで ping を実行しても、状況が大幅に改善されることはほとんどありません。Java プロセスの負荷は少なくなりますが、1 台のマシン内で移動するだけです。(さらに、ICMP ECHO (標準化された ping のコア) の動作により、実際に 1 つのホストから一度に複数のマシンに ping を送信できるかどうかはわかりません。) 遭遇する可能性が高いもう 1 つの問題は、マシンは、実際には役に立たなくても ping に応答することができます到達可能; カーネルが動作している (ping 可能になっている) マシンを見たことがありますが、動作しているユーザー プロセスはなく、マシン上の特定の興味深いサービスがダウンしていることは容易に想像できます。(また、一部のファイアウォールは ping をブロックします。) 各マシンが、そのマシンで実行されている実際のサービスへの何らかの種類の何もしない接続を使用して動作しているかどうかを実際に検出する方がはるかに優れています。

多数のマシンの状態を追跡することを本当に検討している場合は、タスク用に設計されたソフトウェア (Nagios など) の使用を検討する必要があります。これは、Stack Overflow よりもServerFaultにとって重要な問題です…</p>

于 2012-06-18T09:18:10.577 に答える