python michael poeltl © 2011,2012,2013,2015

system administration

Einleitung

Warum nicht alle tools in der täglichen Arbeit als sysadmin mit shellscripts (bash,zsh) abdecken?
Das ist die eine Frage, die gerne gestellt wird.
Warum muss/soll ich das mit einem shellscript lösen, wo ich doch python habe (!?), und ich mir deshalb nicht unnötig die Finger zu verrenken brauche.
Das ist mir auch schon untergekommen. Was gibt man als universal-Antwort?

Ich lehne mich jetzt mal weit aus dem Fenster hinaus und behaupte, dass python fixer Bestandteil der *vonHausaus* installierten Pakete einer jeden Linux-Distribution ist, und python3 ist im Vormarsch, das selbst python3 bereits mit dem Aufsetzen des linuxsystems installiert wird.

psutil

Einleitung

Installation

psutil ist ja ein sogenanntes third party (3rd-party) Modul, und es muss somit downgeloaded und installiert werden.
Du musst dir das Paket (tarball) hier runterladen, dann auspacken und die (gewohnte) Formel eintippseln:

user@host:> pwd
/home/user/Downloads/psutil-0.5.0
user@host:> sudo python3 setup.py install
...

im INSTALL-file werden eh auch andere Möglichkeiten gezeigt, zum Beispiel, mit easy-install
und schon ist psutil verfügbar!)

mem

psutil.phymem_usage()

Gibt ein namedtuple zurück, das dir sagt, wieviel Memory du hast, wieviel davon (in bytes) in Verwendung sind, wieviel frei ist und die Auslastung in Prozent, wobei cached and physmem buffers berücksichtigt werden.

>>> import psutil
>>> psutil.phymem_usage()
usage(total=2078498816, used=1299890176, free=778608640,
percent=27.2)
>>>

psutil.virtmem_usage()

Das retournierte namedtuple gibt nun Auskunft über virtual_memory.

>>> psutil.virtmem_usage()
usage(total=1998737408, used=581128192, free=1417609216,
percent=29.1)
>>>

cached unb buffers

das eine ist abzufragen mittels
psutil.cached_physmem()
und das andere mittels
physmem_buffers.
Die zurückgeworfenen Werte finden sich in der Ausgabe von free wieder!

>>> psutil.cached_phymem()
248926208
>>> psutil.phymem_buffers()
486350848
>>>

cpu

psutil.cpu_percent(interval=0.1, percpu=False)

Gibt eine Kommazahl zurück, die uns sagt, wie hoch die prozentuale CPU-Auslastung systemweit ist.
Der Parameter interval ist per default auf 0.1 gesetzt. Wenn dieser Parameter auf einen Wert > 0.0 gesetzt wurde, dann werden die verstrichenen CPU-Zeiten vor und nach diesem Interval verglichen (blocking).
Ist interval auf 0.0 oder auf None gesetzt, dann werden die verstrichenen CPU-Zeiten verglichen zeit dem letzten Aufruf bzw. seit dem Laden des psutil-Moduls (non-blocking). When percpu is True returns a list of floats representing the utilization as a percentage for each CPU. First element of the list refers to first CPU, second element to second CPU and so on. The order of the list is consistent across calls.

>>> import psutil
>>> psutil.cpu_percent()
5.3
>>> # blocking, per-cpu
>>> psutil.cpu_percent(interval=2,percpu=True)
[17.7, 0.5]
>>> # non-blocking (percentage since last call)
>>> psutil.cpu_percent(interval=0)
6.2
>>> psutil.cpu_percent(interval=0.0,percpu=True)
[13.9, 1.4]
>>>

psutil.cpu_times(percpu=False)

Gibt die System-CPU-Zeiten in einem namedtuple zurück.
Es gibt die verbrauchte CPU-Zeit eines jeden Attributs wieder.

>>> psutil.cpu_times()
cputimes(user=349153.79, nice=339169.26, system=117948.69,
idle=17129869.14, iowait=151828.19, irq=2.5, softirq=10907.34)
>>>

Wenn percpu auf True gesetzt wird, dann wird ein list-object mit zwei namedtuple zurückgegeben. Ersteres für die erste CPU, zweiteres für die zweite CPU (bzw. core). Und wenn es mehr cores gibt, dann wird auch dementsprechend die Anzahl der namedtuple eine höhere.

>>> psutil.cpu_times(percpu=True)
[cputimes(user=230305.77, nice=183829.66, system=63033.7,
idle=8501446.45, iowait=60245.05, irq=2.5, softirq=10798.83),
cputimes(user=118869.18, nice=155339.59, system=54916.62,
idle=8628836.94, iowait=91584.62, irq=0.0, softirq=108.7)]
>>>

Hier geht es zum Seitenanfang und da geht es zurück zur python-Themenübersicht