私は、JVMプロセスで定期的なスレッドダンプを取るシステムを構築しようとしています。私はスレッドダンプを取っている間にJVMに最小のオーバーヘッドを引き起こすつもりです。スレッドダンプを取る方法は複数あり、最終的にはカスタムJVMTIエージェントを構築するか、ThreadMXBeanを使用するかの2つの選択肢があります。誰かがどのアプローチでJVMのオーバーヘッドが最小限になるのか分析したのでしょうか?それとも同じオーバーヘッドを引き起こすのでしょうか?JVM上で定期的なスレッドダンプを取る - ThreadMXBeanとJVMTIエージェント
答えて
サンプリングの頻度に少し依存しますが、ほとんどの場合、影響があり、結果に偏りが生じます。しかし、JVMTIの場合は正直なプロファイラを見てください。https://github.com/RichardWarburton/honest-profiler
ありがとうございます。安全点とAsyncGetCallTraceについて知ることは良いことです。これは私の研究にとって非常に便利です。 – Aniket
'AsyncGetCallTrace'はプロファイリングに適しています。ただし、スレッドダンプは作成されません。私。 'AsyncGetCallTrace'は**アクティブ**スレッドの素敵なトレースを得ることができますが、すべてのスレッドの画像は表示されません。 – apangin
合意。私のユースケースは、ほとんどすべてのスレッドが特定の瞬間に何をしているかのビューを取得するのではなく、プロファイリングの必要性です。 – Aniket
- 1. JVMTIエージェントと別個のJVMの間の通信
- 2. JDI、Javaバイトコード計測とJavaエージェント(JWDP、JVMTI)
- 3. リモートjvmのスレッドダンプをプログラムで作成する
- 4. JVMTIエージェントは起動時にJVMフラグをどのように設定できますか?
- 5. JVMによって設定されたオブジェクトタグは、JVMTIエージェントに表示されますか?
- 6. 実行時にJVMTIエージェントをアンロードしますか?
- 7. JavaエージェントがJVMにロードされない
- 8. JVMTI _jclass toString
- 9. 自動的にスレッドダンプを取得する方法
- 10. JVMは、attach API経由でエージェントにロードされたエージェントのリストを取得できますか?
- 11. はJVMTI
- 12. javaプロセスのスレッドダンプを取るシェルスクリプト
- 13. 非同期エージェントとウィンドウメッセージ
- 14. 実稼働システム上でスレッドダンプを生成する安全性
- 15. Windows 10でスレッドダンプを取ろうとしましたか?
- 16. JVM定数プールの上限を上げる方法
- 17. Jolokia JVMエージェントを自分のPIDにバインドできません
- 18. このJVM TIエージェントを2回ロードできません。
- 19. Pythonスレッドダンプ
- 20. Java - Javaエージェントを実行中のjvmに挿入する
- 21. Pythonで定期的かつ非同期的に値を取得する
- 22. 定期的なデータベースエントリ
- 23. 定期的なスケジューリングアルゴリズム
- 24. PayPal定期購読と定期的?
- 25. JVMTIがロードされていません
- 26. Glassfish v3 - スレッドダンプの取得/解析方法
- 27. 定期的なSharePointカレンダーリストアイテムを取得するには
- 28. Zephyr Bioharness API - 定期的なパケットを取得する
- 29. から定期的に列を取得:
- 30. Python Webサーバーと定期的な作業
'ThreadMXBean'はスレッドダンプを取得する最悪の方法です。スタックトレースのJavaレベルの表現を構築します。そのため、スタックが遅くなり、ヒープに多くのゴミが生成されます。 JVMTIは良い方法です。ただし、スタックトレースを作成するようにJVMに依頼することもできます(リンクされた回答を参照)。 – apangin
質問をリンクしていただきありがとうございます。 JVMに求めるのは、私の(プロファイリング)ユースケースでは不要な、安全なポイントのwaitibgを意味します。 perfツールやDTraceの使用を実際に見てきました。 – Aniket
スタックトレースの主な目的がCPUプロファイリングの場合は、質問の言い換えが必要な場合があります。現在の形では、質問は実際にすでに答えられています。 – apangin