Zurück   KNX-User-Forum > Supportforen > SmartHome.py
knx-user-forum - International KNX Award Winner 2010


Links
Kalender
Spende

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 02.01.2013, 23:36
Benutzerbild von mknx
Erfahrener Benutzer
 
Registriert seit: 21.06.2010
Ort: Würzburg
Beiträge: 700
mknx wird schon bald berühmt werden
Standard Systemverhalten beobachten

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:

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))
Ich lasse das ganze alle fünf Minuten laufen:
Code:
#etc/logic.conf
[System]
    filename = system.py
    cycle = 300
Die Items dazu sehen so aus:
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
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.

Code:
<ul data-log="SmartHome.py" data-max="5" data-filter="true" data-role="listview" data-inset="true"></ul>
Bis bald

Marcus
Angehängte Grafiken
Dateityp: png system.png (443,7 KB, 42x aufgerufen)
__________________
Logik? Visu? KNX? 1-Wire? Russound? ... => SmartHome.py - Version 0.8 und Raspberry Pi Image
Information & Download: http://mknx.github.com/smarthome/ Support: http://knx-user-forum.de/smarthome-py/
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Antwort

Stichworte
logik, smarthome.py, systemverhalten

Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus



Alle Zeitangaben in WEZ +2. Es ist jetzt 13:08 Uhr.



SEO by vBSEO