問題タブ [yourkit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - プロファイラーがサンプルを収集できない場合、応答しないサーバーをデバッグするにはどうすればよいですか?
私が書いたサーバーで時折問題が発生しています。それは Clojure にありますが、それは問題ではないと思います。Java にあるふりをすることができます。とにかく、一度に何時間も正常に動作しますが、動作が非常に悪い場合に適合します。すべてのアクティビティが約 15 秒間停止し、その後数秒間正常に動作し、その後 15 秒間停止します...など(通常) 約 10 分間オンにしてから、通常の動作に戻ります。
私は YourKit を使って多くのプロファイリングを行い、いくつかのもっともらしい容疑者を除外しました:
これはガベージ コレクションの問題ではありません
-XX:+UseConcMarkSweepGC
。このガベージ コレクタの同時実行の性質により、マイナー コレクションとメジャー コレクションの両方でサーバーが正常に動作し続けることを確認しました。また、総メモリなどを使い果たしたときにスラッシングしているわけではありません。現在のヒープ サイズは最大値を大きく下回っています。ロック/同期の問題ではないと思いますが、100% 確実ではありません。YourKit プロファイラーは、時々スレッドが待機していることを示します。たとえば、ログ メッセージを生成するために System.out のロックをめぐって競合しますが、長時間待機するのは、何もすることがないときのスレッドプール内のワーカー スレッドだけです。そしてもちろん、YourKit はデッドロックを検出したことがないと言っています。
サーバーを起動して、プロファイラーを接続せずに放置しても発生するため、プロファイラーが接続されていることが原因ではありません。
すべての CPU 時間を占有しているシステム上の他のプロセスではあり
top
ません。私の Java プロセスの CPU 使用率は 100% であり、他のすべてのプロセスは基本的に 0% です。
私の最大の問題は、プロファイラーがサンプルの受信を停止するため、これらの奇妙なファンク中にサーバーが何をしているかを確認できないことです。CPU使用率チャートのグラフは次のとおりです。
グラフの左側は通常の動作で、約 1 秒ごとにプロファイラーのサンプルが取得されます。右側は「壊れて」おり、プロファイラーが 10 秒ごとにサンプルしか取得していないため、非常に尖っています。取得したサンプルでは、サーバーは通常の業務を行っているように見えます。つまり、リクエストへの応答などです。ログは、それが通常のことを行っていることを確認しますが、プロファイラーがサンプルを持っているときだけです: プロファイラーがサンプルを持っていない、グラフ上で上向きに傾斜している「直線」の間、サーバーはまったく何もしていません.
では、このグラフは誰にでも見覚えがあるでしょうか? 以前にこの問題があり、それを修正したことがありますか? または、YourKit ができないときにサーバーが何をしているかを把握できるツールの方向を教えてもらえますか? 重要な場合、サーバー マシンは Ubuntu 10.04 を実行しており、
profiler - CPU トレースの速度に影響を与える要因はどれですか?
YJP を使用して自社製品の cpu-tracing プロファイルを実行すると、非常に遅くなります。
製品は 8GB ヒープの 16 コア マシンで実行され、プロファイリング中に約 7 ~ 10 ステップの小さな負荷テスト (たとえば、10 個のグラインダー スレッド) をグラインダーを使用して実行します。プロファイラーで製品を起動し、(コントローラー API を使用して) プロファイリングを開始し、グラインダーを開始してユーザー操作をエミュレートするスクリプトがあります。すべての操作が完了すると、スクリプトはプロファイラーにプロファイリングを停止してスナップショットを保存するように指示します。
プロファイリング中、グラインダー テストの各ステップでは、完了するまでに 100 万ミリ秒以上かかります。プロファイリング全体は、わずか 10 個のグラインダー スレッドで 10 時間以上かかることが多く、それぞれがテストを 10 回実行します。プロファイラーがなければ、500 ミリ秒以内に終了します。
プロファイリングする製品の問題以外に、CPU トレース プロセス自体のパフォーマンスに影響を与えるものはありますか?
java - YourKit Remote Profiler の一時ディレクトリを変更する
YourKit リモート プロファイラーがその jar を配置するディレクトリを変更することは可能ですか?
YourKit プロファイリング エージェントを使用して CloudFoundry (Ubuntu 10.10 を実行) で Tomcat を起動しようとすると、次のエラー メッセージが表示されます。
Cannot start: failed to create jar file: /tmp/yjp201304241558.jar;
java - YourKit でのオブジェクト割り当ての記録中に作成されたクラスのインスタンスの数を確認するにはどうすればよいですか?
私はYourKitプロファイラーを初めて使用し、いくつかの良いレビューを読んだ後、試してみたいと思いました。weblogic アプリケーション サーバーで実行されている webapp をプロファイリングしようとしています。基本的に、記録を開始してからオブジェクト割り当ての記録を停止するまでの間に、特定のクラスのインスタンスがいくつ作成されたかを確認したいと考えています。どうやってやるの?それらのオブジェクト作成メソッドのスタックトレースも知りたいです。これを行うには、割り当ての記録を開始した後にメモリのスナップショットもキャプチャする必要がありますか? はいの場合、なぜですか?
java - HashMap put パフォーマンス
hashmap.put()
特定のスタックでコストがかかることが証明されていることを示唆しているように見えるいくつかの yourkit スナップショットについて混乱しています。
このマップのキーが、オーバーライドされていない非常に複雑なオブジェクトであるとしますequals()
。hashCode()
特定の状況でコストがかかる、HashMap.hash()
またはコストがかかる可能性は本当にありますか?Object.hashCode()