#!/usr/sbin/dtrace -Cqs /* Based on http://www.solarisinternals.com/si/dtrace/intr.d */ BEGIN { printf("%5s%% %7s%% %7s%% %7s%% %7s%% %7s%%\n","BUSY","JAVA","USR","SYS","INTR","IDLE"); usr = 0; sys = 0; intr = 0; idle = 0; ticks = 0; java = 0; t0 = timestamp; t00 = t0; cpux = cpu; } profile-1ms { usr += (arg1 != 0) ? 1 : 0; sys += (arg0 != 0) ? 1 : 0; /* usr + intr +idle */ idle += (curthread == curthread->t_cpu->cpu_idle_thread) ? 1 : 0; intr += ((curthread->t_cpu->cpu_intr_actv - 16384) > 0) ? 1 : 0; ticks += (cpu == cpux) ? 1 : 0; java += (execname == "java") ? 1 : 0; } tick-1s { musr = (1000 * usr) / ticks; msys = (1000 * (sys - intr - idle)) / ticks; midle = (1000 * idle) / ticks; mintr = (1000 * intr) / ticks; mtot = musr + msys + mintr + midle; busy = musr + msys + mintr; printf("%3d.%-2d %5d.%-2d %5d.%-2d %5d.%-2d %5d.%-2d %5d.%2d %Y\n", busy/10,busy%10, java/10,java%10, musr/10,musr%10, msys/10,msys%10, mintr/10,mintr%10, midle/10,midle%10, walltimestamp); idle = 0; usr = 0; intr = 0; sys = 0; ticks = 0; java = 0; t0 = timestamp; }