Hallo,
vllt. hilft es ja Dem einen oder anderen. Auf meinen SmartHome.py Instanzen monitore ich das System- bzw. Prozessverhalten.
Der Garbage Collector dürfte eher für Entwickler interessant sein. (Ich bin dadurch auf ein Speicherleck der urllib2 aufmerksam geworden => deswegen gibt es z.B. ein sh.tools.fetch_url(url) in dem das gefixt ist)
Die Logik sieht so aus:
Ich lasse das ganze alle fünf Minuten laufen:
Die Items dazu sehen so aus:
Im Anhange findet Ihr dann die Visu. Dort habe ich noch ein Feature aus 0.8 aktiviert um mir die letzten fünf Logeinträge (mit Warnings oder Error) anzeigen zu lassen.
Bis bald
Marcus
vllt. hilft es ja Dem einen oder anderen. Auf meinen SmartHome.py Instanzen monitore ich das System- bzw. Prozessverhalten.
Der Garbage Collector dürfte eher für Entwickler interessant sein. (Ich bin dadurch auf ein Speicherleck der urllib2 aufmerksam geworden => deswegen gibt es z.B. ein sh.tools.fetch_url(url) in dem das gefixt ist)
Die Logik sieht so aus:
Code:
# logic/system.py # Load l1, l5, l15 = os.getloadavg() logger.debug("Load: {0}, {1}, {2}".format(l1, l5, l15)) sh.system.load(round(l5, 2)) # Thread tn = [] for t in threading.enumerate(): tn.append(t.name) tn = ', '.join(tn) tc = threading.activeCount() logger.debug("Threads ({0}): {1}".format(tc, tn.strip(', '))) sh.system.threads(tc) # Garbage Collector import gc gc.set_debug(gc.DEBUG_LEAK) gc.collect() if gc.garbage != []: logger.warning("Garbage: {0}".format(gc.garbage)) del gc.garbage[:] # Memory statusfile = "/proc/{0}/status".format(os.getpid()) units = {'kB': 1, 'mB': 1024} with open(statusfile, 'r') as f: data = f.read() status = {} for line in data.splitlines(): key, sep, value = line.partition(':') status[key] = value.strip() size, unit = status['VmRSS'].split(' ') threads = status['Threads'] mem = int(size) * units[unit] sh.system.memory(mem) # Objects objects = '' for count, obj in sh.object_refcount()[:10]: objects += "{0}: {1}, ".format(obj.__name__, count) objects.strip(', ') logger.debug("Objects (Top 10): {0}".format(objects)) runtime = sh.tools.runtime() hours, seconds = divmod(runtime.seconds, 3600) minutes, seconds = divmod(seconds, 60) if runtime.days: sh.system.runtime("{0}d {1}h {2}m".format(runtime.days, hours, minutes)) else: sh.system.runtime("{0}h {1}m".format(hours, minutes))
Code:
#etc/logic.conf [System] filename = system.py cycle = 300
Code:
[system] name = System [[memory]] name = Memory (kilobytes) type = num visu = rrd rrd = yes [[load]] name = Load (5m) type = num visu = rrd rrd = yes [[threads]] name = Threads type = num visu = rrd rrd = yes [[runtime]] visu = div name = Laufzeit type = str
Code:
<ul data-log="SmartHome.py" data-max="5" data-filter="true" data-role="listview" data-inset="true"></ul>
Marcus