PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie protokoliere ich die CPU/RAM Auslastung



Korko
18.09.09, 12:26
Hallo,

leider hab ich bei der Suche nichts dazu gefunden.Wie kann ich in der Konsole die CPU / Speicher Auslastung protokollieren?

Danke,
Korko

Rain_maker
18.09.09, 12:31
Einfachster Ansatz:

Regelmässiges Auslesen über die üblichen Konsolentools (free, cpufreq-info oder der entsprechenden /proc-Einträge) mittels cronjob und Ausgabeumleitung in eine Datei.

Je nach Anforderung gibt es zahllose Monitoringtools, die aber nur für die beiden Daten wahrscheinlich Overkill sind,.

Korko
18.09.09, 12:47
Danke schon mal für die schnelle Antwort.
Gibt es auch noch die Möglichkeit, vorallem den Speicherverbrauch einem bestimmten Prozsss zuzuordnen?

Gruß,
Korko

Rain_maker
18.09.09, 12:53
Ergebnisse 1 - 10 von ungefähr 3.370 für Linux Programm Speicherverbrauch ermitteln. (0,16 Sekunden) (http://www.google.com/search?hl=de&client=opera&rls=de&hs=c8w&ei=wXSzSrzjBoSmsgOYqvHRDA&sa=X&oi=spell&resnum=0&ct=result&cd=1&q=Linux+Programm+Speicherverbrauch+ermitteln&spell=1)

Ergebnisse 1 - 10 von ungefähr 7.700 für Linux Prozess Speicherverbrauch ermitteln. (0,51 Sekunden) (http://www.google.com/search?hl=de&client=opera&rls=de&hs=KoH&q=Linux+Prozess+Speicherverbrauch+ermitteln&btnG=Suche&lr=)

int 80h
18.09.09, 13:12
Wenn du eine Script- oder Programmiersprache kannst, dann könntest du auch einfach die Ausgaben von top oder htop nehmen und mit ein paar RegEx deine Infos raussuchen.

asi_dkn
18.09.09, 13:34
sar wäre da au noch eine Alternative... muss man aber den Bedürfnissen anpassen... z.B. wie oft er den Durschnitt von wievielen Sekunden / Minuten messen soll... sollte natürlich so eingestellt sein das man auch allfällige Peaks noch einigermassen erkennen kann.

Andernfalls gibts da ne Menge Tools die dir Graphen generieren... Munin z.B.

Korko
18.09.09, 13:42
Wenn du eine Script- oder Programmiersprache kannst, dann könntest du auch einfach die Ausgaben von top oder htop nehmen und mit ein paar RegEx deine Infos raussuchen.

Danke für die Idee. Es geht sogar noch einfacher wenn man nur an die Info will:
top -b |grep progname > log.log



Ergebnisse 1 - 10 von ungefähr 3.370 für Linux Programm Speicherverbrauch ermitteln. (0,16 Sekunden)

Ergebnisse 1 - 10 von ungefähr 7.700 für Linux Prozess Speicherverbrauch ermitteln. (0,51 Sekunden)


Ich will ja nicht meckern und mir ist klar, dass das jeder Antwort hier eine freiwillige Sache ist aber bei sowas hab ich immer das Gefühl das einige Leute, in der Linux Community, mit ihrem Hochmut einfach in ihrer eigenen Welt schweben. Nicht beleidigt fühlen, sondern mal überlegen was du mir mit dieser Antwort sagen wolltest.

Gruß,
Korko

Rain_maker
18.09.09, 13:50
...sondern mal überlegen was du mir mit dieser Antwort sagen wolltest.

Daß du offensichtlich nicht mal gesucht hast? (Was anhand der Antwortfrequenz eh klar war, wieso selbst den Hintern hochbekommen, wenn man andere für sich denken lassen kann. Und die daraus abgeleitete Erwartungshaltung alles vorgekaut zu bekommen finde ich z.B. mehr als nur ein bisschen arrogant.)?

Alleine in den ersten 10 Treffern finden sich 100%ig die später gemachten Vorschläge wieder (daß die Auswertung von "top" darin auftauchen wird, ist so sicher wie das Amen in der Kirche, von möglicherweise besser geeigneten Alternativen mal ganz abgesehen).


BTW:

Mit Deiner Ausgabeumleitung wirst Du Dich übrigens für eine richtige Auswertung über einen bestimmten Zeitraum gewaltig in die Nesseln setzen, ein Logfile mit nur einer Zeile ist sicher nicht, was Du willst.

int 80h
18.09.09, 16:20
Da ich mir gerade Python ansehe und mir heute langweilig war habe ich mir so etwas mal zur kleinen Übung gemacht:


#!/usr/bin/python
'''statlog.py - Logging CPU and RAM usage

-h Print the help Screen.
-v Use verbose output (with date and time).
-r x Log every x seconds. If not given 10 seconds will be used.
-f logfile Path to logfile. If not given the current working directory is used for logging into statlog.log

example: statlog.py -v -r 15 -f /home/name/mylogs/CPU_RAM.log'''



from time import strftime, sleep
from sys import argv

#Variables
verbose = False
logfile = "./statlog.log"
rate = 10



def getCPUusage( verbose = False ):
'''Getting the average CPU usage of the last minute from /proc/loadavg

Parameter verbose: False -> return only CPU usage; True -> return verbose output'''

loadavg = open("/proc/loadavg","r")
usage = loadavg.read(4) #reading first 4 bytes (first value) from /proc/loadavg
loadavg.close()

usage = usage[2:] + "%" #formating usage-value, e.g. 0.23 to 23%

if verbose:
now = strftime("%Y.%m.%d %H:%M:%S")
return now + " CPU: " + usage
else:
return "CPU: " + usage



def getRAMusage( verbose = False):
'''Getting the RAM usage from /proc/meminfo

Parameter verbose: False -> return only RAM usage; True -> return verbose output'''

meminfo = open("/proc/meminfo","r")
total = meminfo.readline() #reading total RAM from /proc/meminfo
free = meminfo.readline () #reading free RAM from /proc/meminfo
meminfo.close()

total = total.split()[1] #e.g. "MemTotal 12345 kB" is splitted into ['MemTotal', '12345', 'kB']
free = free.split()[1] #then 12345 is taken out by index [1]

used = 100 - ( float(free) * 100 / float(total) )

if verbose:
now = strftime("%Y.%m.%d %H:%M:%S")
return now + " RAM: " + str(int( used )) + "%"
else:
return "RAM: " + str(int( used )) + "%"



def help():
'''Printing a help screen'''

print "statlog.py - Logging CPU and RAM usage"
print " "
print "-h Print the help Screen."
print "-v Use verbose output (with date and time)."
print "-r x Log every x seconds. If not given 10 seconds will be used."
print "-f logfile Path to logfile. If not given the current working directory is used for logging into statlog.log"
print " "
print "example: statlog.py -v -r 15 -f /home/name/mylogs/CPU_RAM.log\n\n"



def init():
'''Checking command line arguments and setting variables

"logfile" is the path to the logfile
"rate" holds the seconds the script is waiting till the next logging of values
"verbose" holds True for verbose logging on or False for verbose logging off'''

global verbose, logfile, rate

if "-h" in argv:
help()

if "-v" in argv:
verbose = True
print "#Verbose logging on"
else:
verbose = False
print "#Verbose logging off"

if "-f" in argv:
logfile = argv[ argv.index("-f") + 1 ] #index() returns the position of -f in the argv list, position + 1 should be the path/file
print "#Using %s as logfile" % logfile
else:
logfile = "./statlog.log"
print "#Using ./statlog.log as logfile"

if "-r" in argv:
rate = argv[ argv.index("-r") + 1 ] #index() returns the position of -r in the argv list, position + 1 should be the rate
print "#Logging every %s seconds" % rate
else:
rate = 10
print "#Logging every 10 seconds"



def log(logfile, verbose=False):
'''Writing values into the logfile

Parameter logfile: path to the logfile the values will be written into
Parameter verbose: False -> return only normal output; True -> return verbose output'''

file = open( logfile, "a")
file.write( getCPUusage(verbose) + "\n")
file.write( getRAMusage(verbose) + "\n")
file.close

#MAIN CODE STARTS HERE

init()

while True:
log(logfile,verbose)
print strftime("%Y.%m.%d %H:%M:%S") + " Logfile updated... next logging in %s seconds..." % rate
sleep( float(rate) )


Für Hinweise auf Fehler und Tipps für besseren Pythonstil sowie Vorschläge zur Erweiterung des Scripts bin ich dankbar.

Vielleicht hilft es ja auch dem Threadstarter.

Grüße, int 80h