Solaris - truss - count und Details

opeschka

opeschka

Grünschnabel
Hi,

gibt es eine Einstellung zu "truss" mit dem man sowohl die Statistik (truss -c) bekommt als auch die Details (truss -f) ?

Folgendes:
Code:
truss -cf -o truss.logs/ope.truss.080508.log <Kommando>
liefert nur die Statistik.

Folgendes:
Code:
truss -f -o truss.logs/ope.truss.080508.log <Kommando>
liefert zwar alle Details, aber keine Statistik.

Ich hätte gerne beides :)

In der man-page habe ich nichts gefunden.

Ich wollte von folgender Alternative absehen:
nach dem Aufruf die log-Datei selbst auswerten und eben selbst eine eigene Statistik erstellen.

Achso:
ich arbeite derzeit unter Solaris 9 mit der bash.
Schonmal vielen Dank für Tipps.

Grüße,
0li
 
Ich wollte von folgender Alternative absehen:
nach dem Aufruf die log-Datei selbst auswerten und eben selbst eine eigene Statistik erstellen.

Spricht was dagegen mit einem kleinen shell-script und awk, sed und co die Ausgaben beider Kommandos zu verwursteln?

Poste doch mal zwei Beispiel-Ausgaben und wie du dir das "kombiniert" vorstellst.
 
Hi,

also "truss -c" liefert folgendes (Ausschnitt) :
Code:
syscall               seconds   calls  errors
_exit                    .000       7
fork                     .000       3
read                    2.818  118180
write                   1.895   51167
open                     .243   13813      4
close                    .090   13843
unlink                   .000       3
time                     .000      14
brk                      .015     746
stat                     .122    2365   2136
lseek                    .156   26234
                     --------  ------   ----
sys totals:             6.847  335846  15238
usr time:             341.591
elapsed:              402.170


und "truss -f" liefert folgendes (Ausschnitt):
Code:
20094:  stat("/usr/lib/locale/en_US.ISO8859-1/en_US.ISO8859-1.so.2", 0xFFBFC180) = 0
20094:  resolvepath("/usr/lib/locale/en_US.ISO8859-1/en_US.ISO8859-1.so.2", "/usr/lib/locale/en_US.ISO8859-1/en_US.ISO8859-1.so.2", 1023) = 52
20094:  open("/usr/lib/locale/en_US.ISO8859-1/en_US.ISO8859-1.so.2", O_RDONLY) = 3
20094:  mmap(0x00010000, 32768, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_ALIGN, 3, 0) = 0xFD9E0000
20094:  mmap(0x00010000, 90112, PROT_NONE, MAP_PRIVATE|MAP_NORESERVE|MAP_ANON|MAP_ALIGN, -1, 0) = 0xFD890000
20094:  mmap(0xFD890000, 14830, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0xFD890000
20094:  mmap(0xFD8A2000, 8822, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 8192) = 0xFD8A2000
20094:  munmap(0xFD894000, 57344)                       = 0
20094:  mmap(0x00000000, 8192, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFD9D0000
20094:  memcntl(0xFD890000, 6840, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
20094:  close(3)                                        = 0

Und ich hätte halt jetzt gerne, dass truss beides in meine Ausgabe-Datei schreibt.

Klar ein kleines awk-sort-Skriptchen würde auch gehen, wenn truss das allerdings schon kann, wäre das mehr Aufwand.
 
AWK - Skript

Hi alle,

für alle die es interessiert, bzw. auch sowas brauchen...

Ich hätte mir dann ein kleines awk-Skript geschrieben zum truss aufbereiten.

Hier das Skript.
Sicherlich verschönerbar, aber es funktioniert:
Code:
BEGIN   {
                FS="	"
        }
        {
                ZEIT=$2
                FUNKTION=substr($3,1,index($3,"(")-1)
        }
FUNKTION == "resolvepath"       {       ZEITresolvepath = ZEITresolvepath       + ZEIT; ANZAHLresolvepat = ANZAHLresolvepat  + 1; FUNKTION = "" }
FUNKTION == "stat"              {       ZEITstat        = ZEITstat              + ZEIT; ANZAHLstat       = ANZAHLstat        + 1; FUNKTION = "" }
FUNKTION == "fstat"             {       ZEITfstat       = ZEITfstat             + ZEIT; ANZAHLfstat      = ANZAHLfstat       + 1; FUNKTION = "" }
FUNKTION == "fstat64"           {       ZEITfstat64     = ZEITfstat64           + ZEIT; ANZAHLfstat64    = ANZAHLfstat64     + 1; FUNKTION = "" }
FUNKTION == "write"             {       ZEITwrite       = ZEITwrite             + ZEIT; ANZAHLwrite      = ANZAHLwrite       + 1; FUNKTION = "" }
FUNKTION == "read"              {       ZEITread        = ZEITread              + ZEIT; ANZAHLread       = ANZAHLread        + 1; FUNKTION = "" }
FUNKTION == "fork"              {       ZEITfork        = ZEITfork              + ZEIT; ANZAHLfork       = ANZAHLfork        + 1; FUNKTION = "" }
# FUNKTION != ""                  {       print ("Noch unbekannte Funktion: >" FUNKTION "<");    }
END     {
                printf ("Prozess        %10s %6s\n", "Zeit", "Anzahl")
                printf ("resolvepath    %10s %6s\n", ZEITresolvepath    , ANZAHLresolvepat )
                printf ("stat           %10s %6s\n", ZEITstat           , ANZAHLstat       )
                printf ("fstat          %10s %6s\n", ZEITfstat          , ANZAHLfstat      )
                printf ("fstat64        %10s %6s\n", ZEITfstat64        , ANZAHLfstat64    )
                printf ("write          %10s %6s\n", ZEITwrite          , ANZAHLwrite      )
                printf ("read           %10s %6s\n", ZEITread           , ANZAHLread       )
                printf ("fork           %10s %6s\n", ZEITfork           , ANZAHLfork       )
        }

wird die auskommentierte Zeile aktiviert, erhält man alle noch fehlenden Befehle, die protokolliert werden würden.
Das Skript kann dann mit diesen Werten erweitert werden.

Viel Spass damit :)


Edit:
achso. Das Skript bereitet die Ausgabe von
Code:
truss -Df
auf
 

Ähnliche Themen

Samba Update von 3.2.5 auf 3.5.6 - Probleme beim Server Browsen

HP PSC 2175 - CUPS druckt nicht

Squid nur zum maskieren der eigenen IP, nicht für Webserver auf port 80

cups, samba druckerfreigabe

Server-Monitoring mit RRDTool

Zurück
Oben