2017-07-31 9 views
3

に、私は以下のようなJavaコードをしたアイドル状態になります-80%。いくつかのスレッドはたまに

奇妙なことに、数分ごとに、すべてのスレッドのCPU utilは、2つのスレッド(または時には1つ)を除いて0%になり、100%になります。 1〜2分後には、70〜80%で再びハミングしても大丈夫でしょう。この動作は数分ごとに繰り返されます。

原因を特定できません。どんなアイデアも参考になるでしょう。

+1

どのように多くのコア、どんなOS、どのように監視していますか?プール、CPUバウンド、またはI/Oバウンドに与えられるタスクの性質は何ですか?タスクは適切に並列化されていますか? CPU使用率だけでなく、スワッピング、自発的および非自発的なコンテキストスイッチも検討する必要があります。ubuntuでは、mpstatが洞察を与えます。 – TruckDriver

+0

コード全体を提出できますか?私はそれを再現したい – snovelli

答えて

0

異なるJavaスレッドは、必ずしも異なるCPUスレッドで実行する必要はありません。あなたの32のJavaスレッドは理論的には、1/32の時間を1つのCPUスレッドで均等に共有することができます。他の31個のCPUスレッドが使用されていなくてもそれはいくぶん無駄になりますが、それでも可能です。

タスクがCPUスレッドにどのように分割されるかは、schedulerになります。あなたの場合、スケジューラーは何らかの理由で2つのCPUスレッドに32のJavaスレッドを分割する必要があると判断しています。

このようなデバッグをどのように開始するかわかりません。それはあなたのコントロールから外れていて、(実際に)常にそうなるでしょう、なぜそれについて心配ですか?

0

あなたのマシン上で実行されている何かがあなたのプログラムよりも優先度が高いと判断され、プールされたタスクの代わりにCPUが切り替える可能性があります。

関連する問題