Processes on-cpu time

Folgendes Script zeigt die Zeiten an, die Prozesse im Status on-cpu waren.
Als Parameter kann die Intervalllänge angegeben werden, die Angabe der on-cpu Zeit
bezieht sich aber immer auf 1 Sekunde.


Beispiel:

           program   pid/tid            ms on cpu (per 1s interval)
            tommyd   20406/1                          19
            tommyd   20410/1                          19
            tommyd   20359/1                          20
            tommyd   20368/1                          20
            tommyd   20370/1                          20
            tommyd   20371/1                          20
            tommyd   20381/1                          20
            tommyd   20364/1                          20
            tommyd   20389/1                          20
            tommyd   20372/1                          20
            tommyd   20373/1                          20
            tommyd   20360/1                          20
            tommyd   20369/1                          21
            tommyd   20366/1                          22
             squid   17307/1                          50
             sched       0/1                          87
           fsflush       3/1                         152
             squid   25998/1                         502
             squid   17183/1                         608
         syslog-ng   15557/1                         845

Der Prozess syslog-ng (pid 15557, thread-id 1) war 745ms on-cpu. Damit war dieser Prozess ca. 85% seiner Zeit busy, er belegt also
eine CPU zu 85%.

#!/bin/sh                                                                                              
                                                                                                       
rate=$1                                                                                                
if [ -z "$rate" ]; then                                                                                
        rate=5                                                                                         
fi                                                                                                     
tick="${rate}s"                                                                                        
                                                                                                       
/usr/sbin/dtrace -n '                                                                                  
 #pragma D option quiet                                                                                
                                                                                                       
                                                                                                       
 BEGIN {                                                                                               
        printf("tracing...\n");                                                                        
 }                                                                                                     
                                                                                                       
 sched:::on-cpu                                                                                        
 /pid != 0/                                                                                            
 {                                                                                                     
        self->on = timestamp;                                                                          
 }                                                                                                     
                                                                                                       
 sched:::off-cpu                                                                                       
 /self->on/                                                                                            
 {                                                                                                     
        this->diff = timestamp - self->on;                                                             
        this->diff /= 1000000; /* ns -> ms */                                                          
        self->on = 0;                                                                                  
                                                                                                       
        @on_cpu[execname, pid,tid] = sum(this->diff);                                                  
 }                                                                                                     
                                                                                                       
 tick-$1                                                                                               
 {                                                                                                     
        normalize(@on_cpu, $2);                                                                        
        trunc(@on_cpu, 20);                                                                            
        printf("           program   pid/tid\t\tms on cpu (per 1s interval)\n");                       
        printa("%18s %7d/%-4d\t\t\t%@8d\n", @on_cpu);                                                  
        printf("\n");                                                                                  
                                                                                                       
        trunc(@on_cpu);                                                                                
 }                                                                                                     
' $tick $rate                                                                                          

Leave a Reply

Your email address will not be published. Required fields are marked *