XえんやKVMなどの仮想マシン用のAPIを提供しているlibvirtに現在仮想マシンが内部で実際に利用しているメモリの値を取得するvirDomainMemoryStatsという関数がある。
実装はlibvirt 0.7.5からされているようなので使えると思って試してみることに。
Ubuntuにデフォルトで入っていたlibvirt 0.8.3を使って実験。
とりあえず関係ありそうな環境は以下のとおり
まずはvirshを確認する。
% virsh help | grep memstat dommemstat get memory statistics for a domain % virsh list Id 名前 状態
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
空行が表示された・・・
続いてRubyでやってみるためにirbを起動。
require 'rubygems' require 'libvirt' conn = Libvirt::open("qemu:///system") dom = conn.lookup_domain_by_id(1) dom.public_methods.grep(/mem/) => ["max_memory", "max_memory=", "memory="]
そもそもメソッドがねえorz
次の手段としてCも考えたけどlibvirtならpythonだろうというよくわからない考えの元pythonに手を出す。
import libvirt conn = libvirt.open("qemu:///system") for domID in conn.listDomainsID(): dom = conn.lookupByID(domID) print dom.memoryStats()
結果
{}
メソッドあるのに値がとれないorz
ちなみに関連の有りそうなページは以下のとおり