3

同じプロセスを実行する多数の Windows 2008 R2 24 コア サーバーがありますが、プロセスの各インスタンスには異なるデータ セットがあります。通常、プロセスの 2 ~ 4 つのインスタンスが各サーバーで実行されます。プロセスは x64 用にコンパイルされ、GUI を備え、Workstation GC を使用します。

毎秒、プロセスは GC カウントをローカル ディスク上のログ ファイルに出力します。ログは、他の多くのことにも使用されます。ときどき、これらのプロセスの 1 つが 5 秒以上実行を一時停止することがあります。その期間、ログには何も書き込まれていないことがわかります。これが発生するたびに、Gen2 GC の数が 1 ずつ増えることを確認します。

これはまれなイベントです。これは、すべてのプロセスで 10000 Gen2 GC ごとに発生する可能性があります。

各マシンには、すべてのプロセスを RAM に保持するのに十分な RAM があります。

今朝、プロセスの 1 つで 9 秒間一時停止しました。今回は、影響を受けるプロセスとマシン全体のパフォーマンス カウンターを取得しました。その時点で実行されていた他のプロセスは影響を受けませんでした。パフォーマンス カウンターの分析は、次のことを示しています。

一時停止後と一時停止前の比較:

  • プロセスの仮想バイト、ページ ファイル バイト、仮想バイト、ワーキング セット、およびワーキング セット - プライベートは、ほぼ同じ量 (1Gb) がドロップされました。プロセスのサイズを把握するために、Private Bytes は 3.1 Gb から 2.1 Gb に減少しました。
  • プロセスのハンドル数が 8835 から 8705 に減少
  • マシン全体で使用可能なバイト数が約 1 Gb 増加
  • 1 秒あたりのページ フォールト数は急増しませんでした
  • 一時停止中の CPU 使用率は安定していた

この活動がスワッピングに起因する可能性があることを誰か確認できますか? マシンに十分な RAM があることを考えると、これらの一時停止を修正するための提案はありますか?

更新 #1 (2012 年 3 月 5 日):

今日、プロセスの 1 つで 6.5 秒の一時停止が発生しました。.NET Clr メモリ パフォーマンス カウンターは、LOH のサイズは変更されていないことを示していますが、Gen 2 ヒープのサイズ、すべてのヒープのサイズ、コミットされた合計バイト数は 700 Mb 減少しています。予約済みバイトの合計が 250 Mb 削除されました。そのため、この特定の GC で Gen2 の多くのガベージが再利用されたようです。

更新 #2 (2012 年 3 月 6 日):

今日、プロセスの 1 つで 7 秒間の一時停止が発生しました。以下が削除されました: Gen 2 ヒープ サイズ (.NET CLR メモリ) by 900 Mb すべてのヒープ内のバイト数 (.NET CLR メモリ) by 900 Mb Num Total Committed Bytes (.NET CLR Memory) by 800 Mb Num Total Reserved Bytes (. NET CLR メモリ) 540 Mb 仮想バイト (プロセス) 550 Mb ワーキング セット (プロセス) 800 Mb ワーキング セット - プライベート (プロセス) ページ ファイル バイト (プロセス) 800 Mb プライベート バイト (プロセス) 800 Mb

LOHは相変わらず

4

2 に答える 2

2

正真正銘の Gen2 GC は、サイズが数ギガのプロセスで数秒かかるようです。

では、Gen2 GC によって 5 秒かかるものと、ほとんど時間がかからないものがあるのはなぜでしょうか? Concurrent/Background Gc を有効にしていて、Concurrent GC が完了したように見えるため、Gen2 GC カウンターがインクリメントされます。これは誤解を招くと思います。

同時 GC を無効にすると、Gen2 GC カウントが大幅に減少し、すべての Gen2 GC に数秒かかります。

于 2012-04-26T19:51:41.967 に答える