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

