1

YJP を使用して自社製品の cpu-tracing プロファイルを実行すると、非常に遅くなります。

製品は 8GB ヒープの 16 コア マシンで実行され、プロファイリング中に約 7 ~ 10 ステップの小さな負荷テスト (たとえば、10 個のグラインダー スレッド) をグラインダーを使用して実行します。プロファイラーで製品を起動し、(コントローラー API を使用して) プロファイリングを開始し、グラインダーを開始してユーザー操作をエミュレートするスクリプトがあります。すべての操作が完了すると、スクリプトはプロファイラーにプロファイリングを停止してスナップショットを保存するように指示します。

プロファイリング中、グラインダー テストの各ステップでは、完了するまでに 100 万ミリ秒以上かかります。プロファイリング全体は、わずか 10 個のグラインダー スレッドで 10 時間以上かかることが多く、それぞれがテストを 10 回実行します。プロファイラーがなければ、500 ミリ秒以内に終了します。

プロファイリングする製品の問題以外に、CPU トレース プロセス自体のパフォーマンスに影響を与えるものはありますか?

4

2 に答える 2

1

最後に使用した YourKit (v7.5.11、かなり古いもので、現在のバージョンは 12) には、サンプリングとトレースの 2 つの CPU プロファイリング設定があり、後者ははるかに高速で精度が低くなります。トレースはより正確であるはずなので、スローダウンが「平均的」であるという声明にもかかわらず、私はそれを自分で使用し、大幅なスローダウンも観察しました。それでも、2 秒から 10 分に短縮されました。私のコードは計算エンジンの断片であり、実質的に IO はなく、何も待機せず、入力を読み取り、結果を計算してコンソールに出力するだけです。したがって、全体の速度低下はプロファイラーから発生し、外部の影響はありません。

質問に戻ります。前述のオプション - サンプリングとトレースはパフォーマンスに影響するため、サンプリングを試すことができます。

考えてみると、YourKit は、スナップショットを定期的に作成したり、低メモリで作成したり、メモリ使用量のプロファイリング、オブジェクトの割り当てなど、自動的に処理を行うようにセットアップできます。これらの各手段により、プロファイリングが遅くなります。おそらく、スクリプト制御の代わりにオンライン セッションを作成して、それが実際に何をするかを確認する必要があります。

于 2013-05-13T08:54:03.953 に答える
0

一部のYourkit Docによると:

トレースはより多くの情報を提供しますが、欠点もあります。まず、プロファイル対象のメソッドに出入りするたびにプロファイラーが特別なコードを実行するため、プロファイル対象のアプリケーションの速度が著しく低下する可能性があります。プロファイリングされたアプリケーションでのメソッド呼び出しの数が多いほど、トレースがオンになっているときの速度が低下します。

2 つ目の欠点は、このモードはプロファイリングされたアプリケーションの実行速度に影響するため、このモードで記録される CPU 時間は、サンプリングで記録される時間よりも不十分になる可能性があることです。メソッド呼び出し回数が本当に必要な場合にのみ、このモードを使用してください。

また:

サンプリングを使用すると、プロファイラーは実行中のスレッドのスタックを定期的にクエリして、コードの最も遅い部分を推定します。メソッド呼び出し回数は利用できず、CPU 時間のみが利用可能です。

通常、サンプリングは、パフォーマンスのボトルネックを突き止めて発見することが目的の場合に最適なオプションです。サンプリングを使用すると、プロファイラーはプロファイリングされたアプリケーションにほとんどオーバーヘッドを追加しません。

また、「壁時計時間」についても言及しているため、ドキュメントが「CPU 時間」で何を意味するのか少し混乱しています。I/O、待機、スリープ、またはその他の種類のブロッキングを行っている場合は、CPU のみの時間ではなく実時間でサンプルを取得することが重要です。やむを得ない。幸いなことに、これがデフォルトのようです (まだ少しはっきりしていませんが)。

CPU サンプリングの既定の構成では、I/O メソッドのウォール タイムと他のすべてのメソッドの CPU 時間を測定します。

「Use Preconfigured Settings...」では、このプレゼントと他のプレゼントを選択できます。(原文のまま)

目標がコードをできるだけ速くすることである場合は、呼び出し回数と測定の「精度」を気にする必要はありません。コードのどの行がほとんどの時間スタック上にあるか、そしてその理由を見つけて ください。そのすべてについてもっと。

于 2013-05-13T19:27:50.697 に答える