2011-10-21 8 views
3

Windowsマシン上で実行されているJavaライブラリがあり、CPU負荷、JVMなどの占有メモリなど、OSに関する情報を記録する必要がありますOS固有のものなので、Java自体は入手できません。Windows上のJavaにCPU負荷などのOS固有のパフォーマンス情報を記録する必要があります

この情報は、ライブラリが十分なリソースを取得できなかったために特定の操作が失敗したことをクライアントに指摘するために必要です。

JVMを選択することはできません。つまり、クライアントがWindows OS固有の機能を実装する特定のJVMを使用するように要求することはできません。

JNI経由で使用できるWindowsライブラリ(DLL)またはAPIはありますか?

また、C++またはC#でDLLを実装することもできますが、これをどのようにして最も効果的に行うことができますか?

編集:JVM自体のプロセスに関するデータにアクセスする必要があります。これは、ネイティブWindows APIのみを使用することができます。だから、私は小さなCプログラムを実装し、これをJNI経由でネイティブDLLとしてリンクする必要があると思います。それについてのヒント?

答えて

5

メモリ部分については、Runtimeのメモリ関連のいくつかの方法を見てください。

Runtime runtime = Runtime.getRuntime(); 
System.out.println(runtime.totalMemory() - runtime.freeMemory()); 

私はまだこれを試していないが、CPU負荷のためfollowingを見てみましょう: は、以下を試してみてください、占有メモリを取得します。 getSystemLoadAverage()メソッドを使用する必要があります。

希望すると便利です。

+0

+1それはそれを行う方法です。 – Fildor

+0

私はこれを行う方法であることをFildorに同意し、JMX Beanを知らなかった。ありがとう!残念ながら、JVMのヒープサイズだけでなく、JVMプロセス自体が使用する仮想メモリの量など、JVMで提供されていない情報にアクセスする必要があります。だからランタイムでは不十分です。 –

1

あなたのニーズがjava.lang.Runtimeで満たされない場合は、JNIルートに行き、必要なものを正確に提供するJava APIを設計することができます。

ラップできる(JNIの)DLLはありませんが、後のデータはいわゆる「パフォーマンスカウンター」としてレジストリにあります。 Linuxでは、/ procからデータを読み取ることができます。

Performance Countersの詳細については、MSDNのサイトを参照してください。

+0

あなたの答えをありがとう、私はCでいくつかのWindows API呼び出しを実装する必要があるように思えます。これにはMSDNサイトへのリンクが役立ちます。 –

関連する問題