2

私は .NET で記述されたフロー制御システムを使用しています。このシステムは、TCP 接続を介して外部システムと相互作用し、異なるエンドポイント間でトランザクションをルーティングします。

私の問題:

起動/初期化時のプライベート ワーキング セット メモリ レベルは約 25000KB です。システムがアイドル状態にあるときの初期化後、プライベート ワーキング セットは、約 57000 KB の制限に達するまで、毎秒約 50 ~ 100 KB ずつ増加します。

情報:

システムはインクリメント中にページ フォールトを生成しています。

制限に達すると、プライベート ワーキング セットは非常に安定した状態を保ち、300 以上のクライアントを接続して高頻度のトランザクションを数時間交換すると、数 MB で上下に変動します。ガベージ コレクションのロジックは非常にうまく機能します。

Redgate の「Memory Profiler」と呼ばれるツールを使用して、このシステムのプロファイリングを行いました。このツールは、初期化後にアンマネージ コードによって割り当てられたメモリのステップアップを教えてくれます。残念ながら、このプロファイラは、アンマネージ コードによって割り当てられたメモリへの洞察をサポートしていないため、見つけるのが困難です。この割り当てられたメモリの内容、割り当てられた理由、およびメモリを割り当てるコード。

コードベース全体は C# で開発され、COM+ アセンブリへの参照はなく、ネイティブ Windows API との通信もありません (このメモリのインクリメント中)。

私の質問:

初期化後にメモリが小さなチャンクで特定のレベルに継続的に増加している理由を見つけるために、正しい方向に向ける必要があります。

4

1 に答える 1

1

ページがワーキング セットに含まれていない場合でも、そのページがディスクにのみ保存されている、またはディスクにまったく保存されていないという意味ではありません。Windows 上のページはスタンバイ リストに移動できます。その場合、WS を離れ、元に戻すにはソフト フォールトが必要です。(なぜこのメカニズムがあるのか​​ わかりませんでしたが、そうです)。ソフトフォールトは安価です。

Process Explorer のシステム情報ウィンドウを使用すると、1 秒あたりのハード フォールトとソフト フォールトの数を確認できます。おそらく、perfmon を使用して利用することもできます。ハードフォールトがあるかどうかを確認することをお勧めします(ハードフォールトがないため、問題はなく、調査を終了できます)。

また、WSはメモリ使用量とは関係ありませんが、それはもうご存知だと思います。

于 2013-02-28T12:30:52.837 に答える