3

クライアントから報告されたメモリ不足の例外についてクラッシュ ダンプ ファイルを検査した結果、!DumpHeap -stat575MB のメモリが 45,000 個の「フリー」タイプのオブジェクトによって占有されていることが示されました。サイズ。

最初に問題を探したのは、ラージ オブジェクト ヒープ (LOH) と固定されたオブジェクトでした。空き領域を含む大きなオブジェクト ヒープは 70MB しかないため、これは問題ではなく、実行すると!gchandles次のように表示されました。

GC Handle Statistics:
Strong Handles:        155
Pinned Handles:        265
Async Pinned Handles:  8
Ref Count Handles:     163
Weak Long Handles:     0
Weak Short Handles:    0
Other Handles:         0

これは、空きオブジェクトの数 (45,000) に比べて非常に少ない数のハンドル (約 600) です。私には、これにより、ピン留めによって引き起こされる空きブロックが除外されます。

また、空きブロック自体も調べて、サイズが一貫しているかどうかを確認しましたが、調べたところ、サイズは大きく異なり、5MB 弱からわずか 12 バイト程度までありました。

どんな助けでも大歓迎です!断片化があるため途方に暮れていますが、ラージ オブジェクト ヒープ (LOH) と固定ハンドルの 2 つの場所が原因であるという兆候は見られません。

4

1 に答える 1

1

無料オブジェクトはどの世代のものですか?

サイズのためにGen 2に常駐する必要があると思います

サイズは世代関係ありません。フリー ブロックが存在する世代を確認するには、次の手順に従います。

!dumpheap -stat -type Freeメソッド テーブルを取得します。

0:003> !dumpheap -stat -type Free
total 7 objects
Statistics:
      MT    Count    TotalSize Class Name
00723538        7          100      Free
Total 7 objects

から!eeheap -gc、世代の開始アドレスを取得します。

0:003> !eeheap -gc
Number of GC Heaps: 1
generation 0 starts at 0x026a1018
generation 1 starts at 0x026a100c
generation 2 starts at 0x026a1000
ephemeral segment allocation context: none
 segment    begin allocated     size
026a0000 026a1000  02731ff4 0x00090ff4(593908)
Large object heap starts at 0x036a1000
 segment    begin allocated     size
036a0000 036a1000  036a3250 0x00002250(8784)
Total Size   0x93244(602692)
------------------------------
GC Heap Size   0x93244(602692)

次に、開始アドレスと終了アドレスを渡すことにより、特定の世代の空きオブジェクトのみをダンプします (たとえば、ここでは世代 2)。

0:003> !dumpheap -mt 00723538 0x026a1000 0x026a100c
 Address       MT     Size
026a1000 00723538       12 Free
026a100c 00723538       12 Free
total 2 objects
Statistics:
      MT    Count    TotalSize Class Name
00723538        2           24      Free
Total 2 objects

したがって、私の単純なケースでは、ジェネレーション 2 に 2 つの空きオブジェクトがあります。

固定ハンドル

600 個の固定オブジェクトによって 45.000 個の空きメモリ ブロックが発生することはありません。それでも私の経験から、600 個の固定ハンドルは多いです。ただし、最初に、空きメモリ ブロックがどの世代に存在するかを確認します。

于 2015-04-04T21:11:25.630 に答える