4

マルチスレッド Java アプリケーションが大量の CPU を消費している理由をデバッグしようとしているときに、各スレッドが CPU をまったく消費しない外部コマンドを実行することがわかりましたが、Java がそれを実行すると、Java ランタイムが CPU を 100% 使用していることがわかりました。

さらにデバッグするために、その外部プロセスを単純な Linux の「ls」コマンドに置き換えました。これが私がそれを実行している方法です-

String[] commands = new String[]{"/bin/sh", "-c", "ls"};
            try {
                Process p = Runtime.getRuntime().exec(commands);
             } catch (IOException ex) {
               //
}

それでも、Java がすべての CPU を使用していることがわかります。

プロセスからの出力を読み取ったり、ストリームを開いたりすることさえありません。

何が間違っている可能性がありますか?Java から外部で実行される単純なlsコマンドが、Java ランタイムに大きな CPU を消費させる原因となるのはなぜですか?

スレッド処理をシミュレートするために、外部コマンドを実行する代わりに、Thread.Sleep() を入れてみましたが、問題なく動作し、CPU を占有することはありません。

4

1 に答える 1

0

既知の問題のように見えます。これを使用する必要があると思います- https://github.com/axiak/java_posix_spawn

アップデート:

java_posix_spawn を使用した後、問題はなくなりました!

于 2012-04-07T13:06:14.257 に答える