私は .NET で記述されたフロー制御システムを使用しています。このシステムは、TCP 接続を介して外部システムと相互作用し、異なるエンドポイント間でトランザクションをルーティングします。
私の問題:
起動/初期化時のプライベート ワーキング セット メモリ レベルは約 25000KB です。システムがアイドル状態にあるときの初期化後、プライベート ワーキング セットは、約 57000 KB の制限に達するまで、毎秒約 50 ~ 100 KB ずつ増加します。
情報:
システムはインクリメント中にページ フォールトを生成しています。
制限に達すると、プライベート ワーキング セットは非常に安定した状態を保ち、300 以上のクライアントを接続して高頻度のトランザクションを数時間交換すると、数 MB で上下に変動します。ガベージ コレクションのロジックは非常にうまく機能します。
Redgate の「Memory Profiler」と呼ばれるツールを使用して、このシステムのプロファイリングを行いました。このツールは、初期化後にアンマネージ コードによって割り当てられたメモリのステップアップを教えてくれます。残念ながら、このプロファイラは、アンマネージ コードによって割り当てられたメモリへの洞察をサポートしていないため、見つけるのが困難です。この割り当てられたメモリの内容、割り当てられた理由、およびメモリを割り当てるコード。
コードベース全体は C# で開発され、COM+ アセンブリへの参照はなく、ネイティブ Windows API との通信もありません (このメモリのインクリメント中)。
私の質問:
初期化後にメモリが小さなチャンクで特定のレベルに継続的に増加している理由を見つけるために、正しい方向に向ける必要があります。