DTrace är ett dynamiskt spårningsramverk skapat av Sun Microsystems för kärn- och programfelsökning i realtid . DTrace skapades ursprungligen för Solaris , släpptes sedan under Common Development and Distribution License (CDDL) och portades till ett antal Unix-liknande system.
DTrace kan användas för att övervaka mängden minne som förbrukas, CPU-tid , filsystem och nätverksresurser som används av aktiva processer på ett körande system. Du kan också få mer detaljerad information, till exempel en lista med argument som varje funktion anropas med, eller en lista över processer som använder en viss fil.
Spårningsskript är utvecklade på ett specialiserat språk . Verktyget stöder interaktion med kod genererad för program skrivna i följande programmeringsspråk : C , C++ , Java , Erlang , JavaScript , Perl , PHP , Python , Ruby , Tcl , igenkännande av funktionsanrop och ursprungliga anropskontexter. Ett antal Unix-program stöder DTrace, ger spårning av operationer och systemanrop, i synnerhet är speciella DTrace-leverantörer utvecklade för MySQL , PostgreSQL , Oracle Database , Univa Grid Engine , Firefox webbläsare .
Verktyget är säkert att använda i en levande miljö: det sker nästan ingen prestandaförsämring under testning.
Spårningsskript är skrivna på ett språk speciellt utvecklat för verktyget D med en C-liknande syntax och utrustade med färdiga funktioner och variabler specifika för spårning [1] . D - program liknar strukturellt awk - program ; de inkluderar en lista över sonder som åtgärderna motsvarar . När ett visst villkor är uppfyllt utlöses sensorn och motsvarande åtgärd vidtas. Ett villkor kan till exempel vara att öppna en viss fil, starta en process eller exekvera en viss kodrad. Det är möjligt att överföra information från en sensor till en annan.
Eftersom verktyget ger spårning med minimal overhead, kan tiotusentals sensorer vara igång samtidigt, nya sensorer kan skapas dynamiskt.
DTrace-skript kan köras från kommandoraden med en eller flera sensorer som argument. Exempel:
# Nya processer med argument, dtrace -n 'proc:::exec-success { trace(curpsinfo->pr_psargs); }' # Filer öppnade av process, dtrace -n 'syscall::open*:entry { printf ("%s %s",execname,copyinstr(arg0)); }' # Antal syscall efter program, dtrace -n 'syscall:::entry { @num[execname] = count(); }' # Antal syscall för syscall, dtrace -n 'syscall:::entry { @num[probefunc] = count(); }' # Syscal-antal efter process, dtrace -n 'syscall:::entry { @num[pid,execname] = count(); }' # Diskstorlek efter process, dtrace -n 'io:::start { printf("%d %s %d",pid,execname,args[0]->b_bcount); }' # sidor som sökts in av process, dtrace -n 'vminfo:::pgpgin { @pg[execname] = summa(arg0); }'DTrace introducerades i november 2003 och släpptes officiellt som en del av operativsystemet Solaris 10 i januari 2005. Blev den första komponenten i OpenSolaris-projektet som fick sin källkod släppt under Common Development and Distribution License ( CDDL ).
I början av 2009 portades DTrace till FreeBSD (version 7.1).
Apple lade till stöd för DTrace i Mac OS X 10.5 "Leopard", inklusive instrumentets grafikprogram . Till skillnad från andra plattformar har Mac OS X en flagga ( P_LNOATTACH ) som inaktiverar processspårning av verktyg som DTrace eller gdb . Inledningsvis skapade detta problem eftersom annan systeminformation inte kunde testas som ett resultat av att denna flagga användes. Det här problemet löstes några månader senare i uppdateringen av Mac OS X 10.5.3.
Portering av DTrace till QNX 7 har rapporterats .
På grund av att CDDL är inkompatibelt med GPL är portering till Linux möjligt men inte lagligt . För Linux utvecklas ett verktyg med liknande funktionalitet som heter SystemTap baserat på instrumenteringsmekanismen kprobes . Oracle lade dock till en betaversion av DTrace till Oracle Linux 2011 [2] , en stabil version släpptes i december 2012, verktyget är tillgängligt som en del av Unbreakable Enterprise Kernel (från och med den andra utgåvan), medan DTrace -kärnan modulen behöll licensen CDDL [3] .
Microsoft WPP/ETW, stöds från Windows Vista .
Tekniken är baserad på WMI , främst WMI-händelser, och inget annat än gör det lättare att skriva kod som väcker dessa händelser.
Källfiler med anrop som höjer händelser måste bearbetas av någon form av förprocessor som tar ut alla formatrader (anropet för att höja en händelse liknar printf() ) till en separat binär fil (.TMF), vilket bara lämnar kvar anropsparametrar i den refaktorerade källkoden.
Utan en TMF-fil för komponenten ser den konsumerande applikationen bara händelsenummer och händelseparametrar, inte textbeskrivningar.
Detta förbättrar systemets prestanda avsevärt. Tekniken leder inte heller till prestandaförsämring om det inte finns någon konsumentapplikation.
I mitten av 2010-talet har Microsoft inte publicerat TMF-filer för någon standard Windows-komponent, med undantag för NDIS (publicerad i slutet av 2010).
Solaris | |
---|---|
Teknologi | |
OpenSolaris |