3

Windowsマシンで実行されているJavaライブラリがあり、CPU負荷、JVMが占有するメモリなど、OSに関する情報をログに記録する必要があります。これは、OS固有であるため、Java自体では取得できないと確信しています。

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

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

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

DLLをC++またはC#で実装することもできますが、これを最も効果的に実行する方法を確認する必要があるのはどこですか?

編集:JVM自体のプロセスに関するデータにアクセスする必要があります。これは、ネイティブのWindowsAPIを介してのみ取得できると思います。したがって、小さなCプログラムを実装し、これをJNIを介してネイティブDLLとしてリンクする必要があると思います。そのためのヒントはありますか?

4

2 に答える 2

5

メモリ部分については、Runtimeのいくつかのメモリ関連メソッドを見てください。占有されているメモリを取得するには、次のことを試してください。

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

私はまだこれを試していませんが、CPU 負荷については、を参照してください。getSystemLoadAverage()メソッドはそれを行う必要があります。

お役に立てれば!

于 2011-10-21T06:52:30.303 に答える
1

java.lang.Runtimeでニーズが満たされない場合は、JNIルートを使用して、必要なものを正確に提供するJavaAPIを設計できます。

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

パフォーマンスカウンターの詳細については、MSDNサイトを参照してください。

于 2011-10-21T16:38:41.283 に答える