ガベージコレクション

ワークステーションGC・サーバGC

  • ガベージ コレクターは、さまざまなシナリオに対応できるように自動的に調整される
  • ただし、作業負荷の特性に基づいてガベージ コレクションの種類を設定できる

ワークステーションGC

  • コレクションは、ガベージ コレクションをトリガーしたユーザー スレッドで、それと同じ優先順位で実行される
  • ユーザー スレッドは一般に通常の優先順位で実行されるため、その場合 (通常の優先順位のスレッドで実行された場合)、ガベージ コレクターの CPU 時間が他のスレッドと競合する
  • ネイティブ コードを実行するスレッドは、サーバーまたはワークステーションのガベージ コレクションでは中断されない
  • プロセッサが 1 つしかないコンピューターでは、構成設定に関係なく、常にワークステーションのガベージ コレクションが使用される

サーバGC

  • コレクションは、 THREAD_PRIORITY_HIGHEST の優先順位で実行される複数の専用スレッドで実行される
  • ヒープおよびガベージ コレクションを実行するための専用スレッドは CPU ごとに 1 つずつ用意され、複数のヒープのコレクションが同時に行われる
  • 各ヒープには小さなオブジェクト ヒープと大きなオブジェクト ヒープがあり、どのヒープもユーザー コードからアクセスできる
  • 異なるヒープのオブジェクトを相互に参照できる 複数のガベージ コレクション スレッドが連携して処理を行うため、同じサイズのヒープを処理した場合、サーバーのガベージ コレクションの方がワークステーションのガベージ コレクションよりも高速
  • 一般に、サーバーのガベージ コレクションの方が、格納されるセグメントのサイズは大きくなる(一般論)
  • サーバーのガベージ コレクションでは、リソースが大量に消費されることがある
    • たとえば、プロセッサが 4 つのコンピューターで実行されているサーバー GC が 12 個のプロセスで使用されているとします。
    • すべてのプロセスで偶然、同時にガベージを回収すると、互いに干渉することになります。同じプロセッサで 12 のスレッドがスケジュールされるためです。
  • プロセスがアクティブの場合、すべてのプロセスでサーバー GC を使用することはお勧めしません。

メモリリーク

診断ツール

  • .NET Core 3.1 SDK 以降でないと使えない模様

dotnet-counters

インストール

dotnet tool install -g dotnet-counters

使い方

dotnet-counters collect --process-id [監視するプロセスのID] --refresh-interval [監視間隔(秒)] --format csv

dotnet-dump

インストール

dotnet tool install -g dotnet-dump

使い方

  • 管理者権限でコマンドプロンプトを起動
  • 作業フォルダに移動
    cd [作業フォルダのパス]
  • データ収集(時間がかかる。Completeが出るまで気長に待つ)
    dotnet-dump collect -p [解析したいプロセスのID]
  • 解析
    dotnet-dump analyze [データファイル]
    • 対話型セッションが開始される

dotnet-gcdump

関連製品


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-10-02 (金) 13:38:11 (23d)