マルチスレッドプロセスがあります。各スレッドは CPU バウンド (計算の実行) であり、大量のメモリも使用します。プロセスは、リソース モニターによると 100% の CPU 使用率で開始されますが、数時間後、CPU 使用率がゆっくりと低下し始めます。24 時間後には 90 ~ 95% になり、下降します。
問題は、何を探すべきか、これをデバッグするために使用できる最もよく知られている方法は何かということです。
追加情報:
十分な RAM があります。そのほとんどは常に使用されていません。perfmon によると、メモリは増加しません (したがって、リークしているとは思いません)。このコードは、.Net とネイティブ C++ を組み合わせたもので、一部のデータ マーシャリングが前後に行われています。これは、いくつかの異なるマシン (24 個の論理コアを持つサーバー) で見られました。perfmon で確認したことの 1 つは、CPU 使用率が低下するにつれて、Modified Page List Bytes インジケータが時間の経過とともに増加することです。
編集 1 使用されているサードパーティ ライブラリの 1 つに openfst があります。そのライブラリの誤用に非常に関連しているようです。具体的には、次の警告があることに気付き ました。警告 LNK4087: CONSTANT キーワードは廃止されました。データを使用
編集 2
質問は閉じられており、再開されていないため、調査結果と問題がどのように解決されたかを、将来のユーザーのために質問の本文に書きます (申し訳ありません)。アプリケーション/dll を消費することによって使用されるすべての openfst FLAGS_* シンボルを定義する openfst.def ファイルがあることが判明しました。「CONSTANT」の代わりに「DATA」というキーワードを使用するように修正する必要がありました (CONSTANT は危険なので廃止されました - 詳細: https://msdn.microsoft.com/en-us/library/aa271769(v=vs. 60).aspx)。その後、CPU 使用率の低下は見られなくなりました。「変更されたページ リスト バイト」インジケータの上昇はもうありません。openfst.def ファイルの CONSTANT キーワードの誤用のために非決定的だった FLAGS (具体的にはガベージ コレクション フラグ - FLAGS_fst_default_cache_gc) のデフォルト値に関連していると思われます。
結論警告を理解してください! できる限りそれらを排除してください!ありがとう。