#!/usr/bin/python2.7 """ ==32266== 1,815,314 bytes in 766 blocks are definitely lost in loss record 421 of 421 ==32266== at 0x4C28BED: malloc (vg_replace_malloc.c:263) ==32266== by 0x59F238D: xdr_string (xdr.c:709) ==32266== by 0x6A93AED: xdr_remote_nonnull_string (remote_protocol.c:31) ==32266== by 0x6A97238: xdr_remote_domain_get_xml_desc_ret (remote_protocol.c:1617) ==32266== by 0x6AB1D2E: virNetMessageDecodePayload (virnetmessage.c:407) ==32266== by 0x6AA63F9: virNetClientProgramCall (virnetclientprogram.c:379) ==32266== by 0x6A775C9: callFull.isra.2 (remote_driver.c:6578) ==32266== by 0x6A778BE: call.isra.3 (remote_driver.c:6600) ==32266== by 0x6A7FAEE: remoteDomainGetXMLDesc (remote_client_bodies.h:2122) ==32266== by 0x6A3547C: virDomainGetXMLDesc (libvirt.c:4380) ==32266== by 0x66B596D: libvirt_virDomainGetXMLDesc (in /usr/lib/pyshared/python2.7/libvirtmod.so) ==32266== by 0x4AAF55: PyEval_EvalFrameEx (in /usr/bin/python2.7) ==32266== ==32266== LEAK SUMMARY: ==32266== definitely lost: 1,815,314 bytes in 766 blocks ==32266== indirectly lost: 0 bytes in 0 blocks ==32266== possibly lost: 239,860 bytes in 54 blocks ==32266== still reachable: 2,182,013 bytes in 1,877 blocks ==32266== suppressed: 0 bytes in 0 blocks """ from gc import collect, garbage import libvirt # from lxml import etree as ET from time import sleep from os import getpid def run(): con = libvirt.open('qemu:///system') for name in con.listDefinedDomains(): dom = con.lookupByName(name) xml = dom.XMLDesc(libvirt.VIR_DOMAIN_XML_INACTIVE) del xml # root = ET.fromstring(xml) # uuid = root.findtext('name') # print name, uuid def stat(): filename = '/proc/%d/statm' % (getpid(),) with open(filename, 'r') as statm: data = statm.read() size, resident, shared, trs, lrs, drs, dt = map(int, data.split()) return '%d\t%d' % (size, resident) def main(): for i in xrange(100): run() collect() print garbage, stat() if __name__ == '__main__': main()