Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie protokoliere ich die CPU/RAM Auslastung
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,.
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=)
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.
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.
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.
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.