Programme um CPU Auslastung/Laufzeit, RAM Auslastung etc. auszulesen

  • Hallo!

    Ich hätt grad gerne eine Möglichkeit, wie ich während eines Testlaufs eines Programms (eines, das in einer Konsole aufgerufen wird) mitloggen kann, wieviele Kerne benutzt werden, ev. wie hoch deren Auslastung dabei ist, wieviel RAM oder auch Festplattenplatz benutzt wird (könnte ja sein, dass temporäre Dateien geschrieben werden, die am Schluss gar nicht mehr da sind) usw usf.
    Ich hab grad nicht viel Plan, wie ich das überhaupt mitloggen lassen könnte, denn so ein paar Befehle (wie 'top', 'mpstat'etc.) hab ich schon gefunden, aber ich wüsste jetzt gerade nicht, wie ich die zu einem netten Logfile zusammenschustern könnte...

    Prinzipiell soll das ganze über die Konsole auf einem Linuxrechner laufen können, also sind shell-Scripts etc., aber viell. auch Javacode (ich bin noch nicht sicher, ob ich das auszuführende Programm viell. über ein Javaprogramm aufrufe) sinnvoll.

    Ich hoffe, hier haben ein paar Leute mehr Ideen zu soetwas als ich zu dieser Stunde :) Viell. hat ja jemand schonmal für ein Praktikum sowas gemacht...

    Ihr glücklichen Augen, Was je ihr gesehen, Es sei wie es wolle, Es war doch so schön!

  • "Wieviele Kerne" und "Prozessorauslastung" sind nicht besonders wohldefinierte Fragen, glaub ich. Da spielt sehr stark mit, was das Betriebssystem so tut, und was für andere Prozesse laufen. Wenn ich neben deinem Prozess einen anderen teuren Prozess laufen habe, braucht deiner insgesamt (ungefähr) gleich viel CPU-Sekunden wie wenn er allein ist, aber vielleicht lastet er den Prozessor nur halb aus, weil der eben zur anderen Hälfte mit dem anderen Prozess beschäftigt ist.

    Bei Valgrind ist ein tool dabei (Cachegrind), das dir Anzahl der ausgeführten Befehle, Speicherzugriffe, Cache hits und misses etc. zählt. Auch das simple "time" kann den (maximalen) Speicherverbrauch und noch ein paar andere nette Statistiken ermitteln. Was Festplattenplatz betrifft, wüsste ich gerade nichts direktes; aber ist nicht die Anzahl der Zugriffe interessanter als der maximal verwendete Platz? Soll heißen, ein Programm, das nur 10 kB auf der Platte belegt, diese aber eine Millionmal liest und neu beschreibt, wird dafür länger brauchen als ein Programm, das einmal 100 kB rausdumpt.

    Geht es dir um die Optimierung eines bestimmten Programms, oder versuchst du Statistiken über mehrere verschiedene Programme zu sammeln?

    *plantsch*

  • "Wieviele Kerne" und "Prozessorauslastung" sind nicht besonders wohldefinierte Fragen, glaub ich. Da spielt sehr stark mit, was das Betriebssystem so tut, und was für andere Prozesse laufen. Wenn ich neben deinem Prozess einen anderen teuren Prozess laufen habe, braucht deiner insgesamt (ungefähr) gleich viel CPU-Sekunden wie wenn er allein ist, aber vielleicht lastet er den Prozessor nur halb aus, weil der eben zur anderen Hälfte mit dem anderen Prozess beschäftigt ist.


    Ja, das mit den anderen Prozessen hab ich auch nicht so berücksichtigt gehabt...ich hab die Fragen mehr oder minder von meiner Angabe übernommen. Dass ja andere Prozesse auch laufen, ist mir klar, ich hoffe aber, es gibt irgendwas ur mächtiges, das auslesen kann, wieviel Prozessorzeit genau mein Prozess verbraucht (viell. mit ein bisschen magic ;) - mit Java brauch ich gar nicht erst was suchen, oder? Weil die VM ja gar nicht auf diese Systemwerte zugreifen können wird...)


    Bei Valgrind ist ein tool dabei (Cachegrind), das dir Anzahl der ausgeführten Befehle, Speicherzugriffe, Cache hits und misses etc. zählt. Auch das simple "time" kann den (maximalen) Speicherverbrauch und noch ein paar andere nette Statistiken ermitteln. Was Festplattenplatz betrifft, wüsste ich gerade nichts direktes; aber ist nicht die Anzahl der Zugriffe interessanter als der maximal verwendete Platz? Soll heißen, ein Programm, das nur 10 kB auf der Platte belegt, diese aber eine Millionmal liest und neu beschreibt, wird dafür länger brauchen als ein Programm, das einmal 100 kB rausdumpt.


    Time ist mal cool! Danke :)


    Geht es dir um die Optimierung eines bestimmten Programms, oder versuchst du Statistiken über mehrere verschiedene Programme zu sammeln?

    Mir geht es darum ein Programm auf einem Superrechner auszuführen und damit ich weiß, wieviel Zeit das Programm ca. brauchen wird, soll ich mit einem Test herausfinden, wie lange es für z.B. 3k oder 300k Dateien benötigt, damit ich dann hochrechnen kann, wielange die gesamte Rechenzeit sein wird. Es braucht nicht allzu genau sein, aber da time&storage für mich alloziert werden müssen, brauch ich ein paar Werte bezüglich Laufzeit/Speicherbelegung etc. . Und dabei steh ich irgendwie auf der Leitung...

    Ihr glücklichen Augen, Was je ihr gesehen, Es sei wie es wolle, Es war doch so schön!

  • naja, je nachdem wie quick & dirty (oder eben nicht) das sein soll - wie wärs damit?

    date >> /tmp/vmstat.log
    vmstat >> /tmp/vmstat.log
    df >> /tmp/vmstat.log

    das ganze in ein shell-skript und per cronjob jede minute (oder je nachdem welche auflösung du brauchst) ausführen.

    ansonsten gibts ja auch etliche tools zum monitoring, wie zb munin

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!