無限ループからTimerTaskに切り替えると、CPU使用率がこのように低下したのはなぜですか?

netflux:

私はこのように構成されたデーモンを書きました:

while( true ) {
  // do some stuff
  Thread.sleep( 1000 );
}

100%までという非常に大量のCPUを使用していることに気付きました。同じCPUの問題が発生する数か月間、運用サーバーに同様のデーモンがありました。

昨日、TimerTaskを使用するようにコードをリファクタリングしましたすぐに、開発ボックスのCPU使用率が低下していることに気付きました。そこで私は本番環境にデプロイし、Muninを使用して再確認することにしました。ここにグラフがあります:

負荷平均

CPU使用率

いくつかのポイント:

  • 本番サーバーでは、JVM以外には何も実行されていません。
  • 実行中の他のアプリケーションスレッドはありません
  • It was definitely executing the old-style code at the correct periodic intervals - I always write to the log each time the thread executes.

So: why is Thread.sleep so inefficient compared to TimerTask?

Jon Skeet :

Three possibilities I can think of:

  • You have a huge number of threads doing this, and they're context switching all the time. Using a timer will mean there's only one thread instead. On the other hand, that means you will only get one task executing at a time.
  • You have a continue; statement somewhere in your loop before the sleep, so even if the main body of work of the loop isn't executing very frequently, something is. It's hard to say without seeing some more concrete code though.
  • JVMとOSの組み合わせが壊れています。これは確かにかなりありそうにないようです。

繰り返し実行するだけの単純なループThread.sleep(1000)は非常に安価である必要があります。これも簡単に確認できます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Dask:CPU使用率が突然低下したのはなぜですか?

分類Dev

CPUの使用率が60〜70%を超えないのはなぜですか?ボトルネックはどこにありますか?

分類Dev

ボードにコンソールにxが1つしか表示されないのはなぜですか?また、xからoに切り替えることができないのはなぜですか?

分類Dev

CPU使用率が高いと、仮想マシンの速度が低下するのはなぜですか?

分類Dev

HibernateがCLOBではなくLONGを使用するように切り替えたのはなぜですか?

分類Dev

ゲームの更新速度をロックすると、CPU使用率が高くなります。何もしていないときにスレッドをスリープ状態にするにはどうすればよいですか?

分類Dev

このgithubプロジェクトを使用しようとすると、無限ループに陥るのはなぜですか?

分類Dev

ToList()を追加しない限り、foreachでLinqグループ選択に加えられた変更が無視されるのはなぜですか?

分類Dev

CPUの使用率がランダムに100%ピークになるのはなぜですか?

分類Dev

CPUの使用率がランダムに100%ピークになるのはなぜですか?

分類Dev

なぜbreaking-retain-cycleはこのように無限ループに陥らないのでしょうか?

分類Dev

シェルから現在のCPU使用率を確認するにはどうすればよいですか?

分類Dev

src / runtime / proc.goのmain関数に、一見役に立たないように見える無限ループがあるのはなぜですか?

分類Dev

CSSキーフレームアニメーションのCPU使用率が高いのですが、このようにする必要がありますか?

分類Dev

CoreData:book.isPublicが切り替えられたときにUIを更新しないのはなぜですか

分類Dev

このCPU使用率はXorgにとって正常ですか?

分類Dev

C#Windowsフォームのカスタムコントロールが頻繁に再描画されるため、CPU使用率が高くなるのを減らすにはどうすればよいですか?

分類Dev

非常に高いCPU使用率なしで、SVGパスを下る無限のマーカー移動をアニメーション化するにはどうすればよいですか?

分類Dev

CPUの平均使用率が30分間で90%を超えたときに、電子メールアラートを取得するにはどうすればよいですか?

分類Dev

EC2サーバー上の複数のRubyプロセスが100%のCPU使用率を引き起こしているのはなぜですか?

分類Dev

これがwhileループによって無限ループが発生するのはなぜですか?

分類Dev

データフレームの列が入れ替えられている:列を名前で識別して割り当てるときに、ループが列の値を切り替えるのはなぜですか?

分類Dev

ラップトップが接続されているときにCPU使用率が100%に達するのはなぜですか?

分類Dev

このjavascriptループが無限に戻るのはなぜですか?

分類Dev

CPU使用率が急上昇し続けるのはなぜですか?

分類Dev

CPU使用率が急上昇し続けるのはなぜですか?

分類Dev

String.valueOfまたはFloat.toStringを使用すると、このループが無限になるのはなぜですか?

分類Dev

コマンドの実行が終了したときに自動的にターミナルに切り替えるにはどうすればよいですか?

分類Dev

Prometheusでirateまたはrateを使用してCPU使用率が計算されるのはなぜですか?

Related 関連記事

  1. 1

    Dask:CPU使用率が突然低下したのはなぜですか?

  2. 2

    CPUの使用率が60〜70%を超えないのはなぜですか?ボトルネックはどこにありますか?

  3. 3

    ボードにコンソールにxが1つしか表示されないのはなぜですか?また、xからoに切り替えることができないのはなぜですか?

  4. 4

    CPU使用率が高いと、仮想マシンの速度が低下するのはなぜですか?

  5. 5

    HibernateがCLOBではなくLONGを使用するように切り替えたのはなぜですか?

  6. 6

    ゲームの更新速度をロックすると、CPU使用率が高くなります。何もしていないときにスレッドをスリープ状態にするにはどうすればよいですか?

  7. 7

    このgithubプロジェクトを使用しようとすると、無限ループに陥るのはなぜですか?

  8. 8

    ToList()を追加しない限り、foreachでLinqグループ選択に加えられた変更が無視されるのはなぜですか?

  9. 9

    CPUの使用率がランダムに100%ピークになるのはなぜですか?

  10. 10

    CPUの使用率がランダムに100%ピークになるのはなぜですか?

  11. 11

    なぜbreaking-retain-cycleはこのように無限ループに陥らないのでしょうか?

  12. 12

    シェルから現在のCPU使用率を確認するにはどうすればよいですか?

  13. 13

    src / runtime / proc.goのmain関数に、一見役に立たないように見える無限ループがあるのはなぜですか?

  14. 14

    CSSキーフレームアニメーションのCPU使用率が高いのですが、このようにする必要がありますか?

  15. 15

    CoreData:book.isPublicが切り替えられたときにUIを更新しないのはなぜですか

  16. 16

    このCPU使用率はXorgにとって正常ですか?

  17. 17

    C#Windowsフォームのカスタムコントロールが頻繁に再描画されるため、CPU使用率が高くなるのを減らすにはどうすればよいですか?

  18. 18

    非常に高いCPU使用率なしで、SVGパスを下る無限のマーカー移動をアニメーション化するにはどうすればよいですか?

  19. 19

    CPUの平均使用率が30分間で90%を超えたときに、電子メールアラートを取得するにはどうすればよいですか?

  20. 20

    EC2サーバー上の複数のRubyプロセスが100%のCPU使用率を引き起こしているのはなぜですか?

  21. 21

    これがwhileループによって無限ループが発生するのはなぜですか?

  22. 22

    データフレームの列が入れ替えられている:列を名前で識別して割り当てるときに、ループが列の値を切り替えるのはなぜですか?

  23. 23

    ラップトップが接続されているときにCPU使用率が100%に達するのはなぜですか?

  24. 24

    このjavascriptループが無限に戻るのはなぜですか?

  25. 25

    CPU使用率が急上昇し続けるのはなぜですか?

  26. 26

    CPU使用率が急上昇し続けるのはなぜですか?

  27. 27

    String.valueOfまたはFloat.toStringを使用すると、このループが無限になるのはなぜですか?

  28. 28

    コマンドの実行が終了したときに自動的にターミナルに切り替えるにはどうすればよいですか?

  29. 29

    Prometheusでirateまたはrateを使用してCPU使用率が計算されるのはなぜですか?

ホットタグ

アーカイブ