リモート マシンの CPU 使用率やその他のシステム情報を表示する必要があるプロジェクトに取り組んでいます。これを実現するために SIGAR を使用することを提案する人がいますが、その使用方法がわかりません。ソースコードは私にはあまり意味がありませんでした。基本的に、私の質問は、ホスト IP と JMX ポートが提供されたときに SIGAR によって提供された MBean をサーバーに登録する方法と、後で他のコンピューターからシステム情報を取得する方法です。JMX の動作に誤りがある場合は、訂正してください。前もって感謝します。
3 に答える
これらは、登録可能な MBean に組み込まれた Sigar であるクラスの名前です。
- org.hyperic.sigar.jmx.SigarCpu
- org.hyperic.sigar.jmx.SigarCpuInfo
- org.hyperic.sigar.jmx.SigarCpuPerc
- org.hyperic.sigar.jmx.SigarLoadAverage
- org.hyperic.sigar.jmx.SigarMem
- org.hyperic.sigar.jmx.SigarProcess
- org.hyperic.sigar.jmx.SigarRegistry
- org.hyperic.sigar.jmx.SigarSwap
ただし、Sigar は、MBean がロードされるときにターゲット JVM の lib-path にある必要があるネイティブ ライブラリに依存するため、これらをリモートで展開するのは非常に複雑です。つまり、監視する各ターゲット ホストにライブラリと MBean を積極的にロードする必要があります。
リモート呼び出しを介してターゲット JVM にこれをロードさせる方法をハックできるかもしれませんが、それは自明ではなく、JVM のセキュリティ設定をバイパスする必要があります。デフォルトでは、これは想定されていないことだからです。できること。
さまざまな SIGAR 出力を JMX mbean 属性として公開するには、いくつかのラッピング オブジェクトを作成する必要があるように思われます。その方法は、JMX Bean を公開するために何を使用しているかに大きく依存します。さまざまなタイプの SIGAR 出力 (メモリ、ディスクなど) ごとに 1 つのラッピング オブジェクトを記述します。
役立つかもしれないSimpleJMXライブラリを作成しました。この形式を使用して、JMX 経由で情報を公開するために使用できるサンプル オブジェクトを提供します。JMX 手段を公開するために使用しているメカニズムに適応させることができます。ProcMem
以下の私の sigar コードがインスタンスを取得するのに正しいかどうかを知るには、私は SIGAR に精通していません。
@JmxResource(description = "Show SIGAR Info", domainName = "foo")
public class SigarProcMem {
private ProcMem procMem;
{
// sorry, I'm not up on sigar so I'm not sure if this works
Sigar sigar = new Sigar();
procMem = sigar.getProcMem(sigar.getPid());
}
@JmxAttributeMethod(description = "Resident memory")
public long residentMemory() {
return procMem.getResident();
}
@JmxAttributeMethod(description = "Get the Total process virtual memory")
public long totalVirtualMemory() {
return procMem.getSize();
}
}