2016-07-24 3 views
2

C++から現在のjvm stats、例えばクラスのロードや現在のヒープサイズをプログラムで取得する方法はありますか?私はそれを行うための多くのツールがあることを知っていますが、私は時々これらの統計を読む別のアプリケーションとこれを統合したいと思います。C++からのjvmヒープサイズのモニタ

+0

C++から他のツールを実行し、出力を収集しますか? (あなたが普通の* NIXの世界にいる場合)(答えではなく、ただの回避策) – Ped7g

+0

ツールのほとんどはコマンドラインオプションを持たないGUIベースです。彼らはスイングや何かのJavaで構築されているようです。 –

+1

['jstat'](https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html)は、ヒープ、gc、クラスのロードとJITのコンパイルを監視するためのコマンドライン・ツールです。 ['jcmd'](https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr006.html)' PerfCounter.print'も役立ちます。 – apangin

答えて

0

JVMTIJNIをご覧ください。

JVMTIは、あなたがそれはまた、「ガベージコレクションスタート」&「ガベージコレクションの完了」イベントを、含まれているヒープトラバーサルなどのような低レベルの機能の負荷で、Javaアプリケーションにネイティブエージェントを添付することを可能にする可能性出発点として使用することができます。

JNIは、Java関数をネイティブコード(および逆も同様)から呼び出すことができます。このテクニックを使用して、ManagementFactoryまたは必要な情報を提供する同様のJavaクラスから情報を取得することができます。 This postには、JNI経由で静的なJavaメソッドを呼び出す方法の完全な例が含まれています。

+0

JVMTIエージェントをjvmでロードする必要があります。後でそれをjvmに添付することはできないようです。 jvmから情報を得るためにJavaコードを使用していないのですか? jvmがロードするためにもっと多くのものを追加しています。あなたは侵入監視していますか? –

+0

@LL:tools.jarを使用して 'com.sun.tools.attach.VirtualMachine'を使用して、実行中のJVMにJVMTIエージェントを添付することができます。http://docs.oracle.com/javase/6 /docs/jdk/api/attach/spec/com/sun/tools/attach/VirtualMachine.html。 問題は、ネイティブエージェントを実行中のJVMに接続するために別のJavaプログラムが必要であり、ネイティブコードからJVMに直接接続するための解決策がまだ見つかりませんでした。 –

+0

[私自身の質問の1つ](http://stackoverflow.com/questions/38588632/attach-native-application-via-jni-to-already-running-jvm-on-linux)、apanginはちょうど私に彼の提案プロジェクト[jattach](https://github.com/apangin/jattach)。ネイティブコードから実行中のJVMに接続することができます。 –

関連する問題