デバイス監視システムを開発するために、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