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