3

.NETアプリケーションのどのスレッドが凶暴になっているのかを知る必要があります。それはほぼ完全なCPU時間を消費します。

問題:

  • アプリケーションはリモートPCで実行されています
  • マシンへの私の唯一のアクセスはRDP経由です
  • お客様のサイトで利用できるVisualStudioはありません
  • そのため、リモートデバッグを介して接続できません
  • ただし、いくつかのファイルをマシンにコピーして、そこでツールを起動することはできます。

私の質問:

  • 「見る」可能性はありますか(標準のツールまたはマシンにコピーできるツールを使用して)
    • どのスレッドがすべてのCPU時間を消費しているか
    • このスレッドによって呼び出されるメソッドは何ですか?

「その他のオペレーティングシステム」では、ライブコールスタックを作成するか、ダンプを開始して、スレッドが無限ループに入っているかどうかを確認できます。Windows 7と.NETでそのような可能性はありますか?

環境:

  • Windows 7(x86)
  • .NET 4.0

よろしくお願いします

セブン

4

4 に答える 4

2

はい、それは可能です。
プロセスがx86OSで実行されているx86プロセスまたはx64OSで実行されているx64プロセスである場合は、ProcessExplorerのみが必要です

  1. 不正なアプリケーションのプロパティを開きます
  2. [スレッド]タブに切り替えます
  3. 「CPU」で並べ替え
  4. CPU使用率の高いスレッドを選択し、[スタック]をクリックします。これで、そのスレッドのマネージスタックが表示されます。詳細については、このブログ投稿を参照してください。

プロセスがx64OSでx86の場合、もう少し複雑になります。この情報が必要な場合は、コメントしてください。

于 2012-12-11T11:33:16.203 に答える
2

SamのスタンドアロンCPUアナライザーを使用します。これは、CPUのプロファイルを作成して、CPUが何をしているかを確認し、テキストファイルを生成します。懸念がある場合は、このコードが昨日OSSとしてリリースされました。

于 2012-12-11T11:38:19.857 に答える
0

スタンドアロンツールとして利用できるため、リモートデバッガーを使用するためにVisualStudioをインストールする必要はありません。次のいずれかを実行できます。

  • リモートデバッガーの使用を許可するためにファイアウォールの例外を作成するように依頼します'通常'
  • PuTTy + freeSSHdのようなものを使用して、リモートマシンと自分のマシンの間に逆トンネルを設定してから、トンネルを介してリモートデバッガーを使用します。

Process Explorerを使用して、どのスレッドがすべてのCPU時間を消費しているかを確認することもできますが、これでは、多くの用途を説明するのではなく、比較的役に立たないスレッドハンドルが提供されます。

もう1つできることは、物理マシンをVMイメージに変換し、そのVMイメージをローカルで起動してテストすることです。

于 2012-12-11T11:30:56.390 に答える
0

(インストール済みの)perfmon.exeツールを使用して、各スレッドのCPU使用率を監視できます。

また、アプリケーションでログファイルを作成することもできます。このログファイルは、作成する各スレッドにある種のスレッド名を関連付けて、どのスレッドがどのスレッドであるかを把握できるようにします。

于 2012-12-11T11:32:24.440 に答える