#!/usr/sbin/dtrace -Zs #pragma D option quiet php*:::compile-file-entry { printf("PHP compile-file-entry\n"); printf(" compile_file %s\n", copyinstr(arg0)); printf(" compile_file_translated %s\n", copyinstr(arg1)); } php*:::compile-file-return { printf("PHP compile-file-return\n"); printf(" compile_file %s\n", copyinstr(arg0)); printf(" compile_file_translated %s\n", copyinstr(arg1)); } php*:::error { printf("PHP error\n"); printf(" errormsg %s\n", copyinstr(arg0)); printf(" request_file %s\n", copyinstr(arg1)); printf(" lineno %d\n", (int)arg2); } php*:::exception-caught { printf("PHP exception-caught\n"); printf(" classname %s\n", copyinstr(arg0)); } php*:::exception-thrown { printf("PHP exception-thrown\n"); printf(" classname %s\n", copyinstr(arg0)); } php*:::execute-entry { printf("PHP execute-entry\n"); printf(" request_file %s\n", copyinstr(arg0)); printf(" lineno %d\n", (int)arg1); } php*:::execute-return { printf("PHP execute-return\n"); printf(" request_file %s\n", copyinstr(arg0)); printf(" lineno %d\n", (int)arg1); } php*:::function-entry { printf("PHP function-entry\n"); printf(" function_name %s\n", copyinstr(arg0)); printf(" request_file %s\n", copyinstr(arg1)); printf(" lineno %d\n", (int)arg2); printf(" classname %s\n", copyinstr(arg3)); printf(" scope %s\n", copyinstr(arg4)); } php*:::function-return { printf("PHP function-return\n"); printf(" function_name %s\n", copyinstr(arg0)); printf(" request_file %s\n", copyinstr(arg1)); printf(" lineno %d\n", (int)arg2); printf(" classname %s\n", copyinstr(arg3)); printf(" scope %s\n", copyinstr(arg4)); } php*:::request-shutdown { printf("PHP request-shutdown\n"); printf(" file %s\n", copyinstr(arg0)); printf(" request_uri %s\n", copyinstr(arg1)); printf(" request_method %s\n", copyinstr(arg2)); } php*:::request-startup { printf("PHP request-startup\n"); printf(" file %s\n", copyinstr(arg0)); printf(" request_uri %s\n", copyinstr(arg1)); printf(" request_method %s\n", copyinstr(arg2)); } DTrace is an always-available, low overhead, tracing framework available on a number of platforms including Solaris, macOS, Oracle Linux and BSD. DTrace can trace operating system behavior and user program execution. It can display argument values and be used to infer performance statistics. Probes are monitored by user created scripts written in the DTrace D scripting language. This allows efficient analysis of data points. PHP probes that are not being actively monitored by a user's DTrace D script do not contain instrumented code so there is no performance degradation during normal application execution. Probes that are being monitored incur an overhead low enough to generally allow DTrace monitoring on live production systems. PHP incorporates "User-level Statically Defined Tracing" (USDT) probes that are triggered at runtime. For example, when a D script is monitoring PHP's Only the PHP USDT probes are described here. Refer to external general and operating system-specific DTrace literature to see how DTrace can be used to trace arbitrary functions, and how it can be used to trace operating system behavior. Note not all DTrace features are available in all DTrace implementations. DTrace static probes are included in PHP 5.4. Prior to this they were available via a » PECL extension, which is now obsolete. The static DTrace probes in PHP can alternatively be used with the SystemTap facility on some Linux distributions. DTrace atau Dynamic tracing framework merupakan sebuah fitur sistem operasi yang diperkenalkan bersama Sun’s Solaris akhir tahun 2003. Dengan DTrace programmer dan systems administrator dapat melakukan \’trace\’ atau menelusuri kernel dan aplikasi di sistem yang sedang jalan (produktif) dalam upaya menemukan kekliruan. Dengan demikian DTrace memiliki kemampuan yang memadai dalam untuk tracking daripada solusi yang ada sebelumnya. Setelah Sun Microsystems membebaskan kode sumbernya awal 2005, alat ini kemudian menjadi platform software yang kemudian diadopsi sistem operasi lain termasuk OpenSolaris, Mac OSX dan FreeBSD. DTrace adalah Infrastruktur atau alat yang dilengkapi dengan AD Trace language dan interpreter (penerjemah). DTrace menjadi infrastruktur yang tangguh dan membolehkan developers untuk diagnosa system and tingkah laku applikasi. Ada beberapa istilah yang berkaitan dengan DTrace yakni Probe, Aggregasi, Predikat dan Features. Berikut beberapa penjelasan singkat dari beberapa istilah tersebut. Probe mengacu dari instrumentation dengan dengan namespace schema -Provider: Module: Function : Name. • Provider – merepresentasikan sebuah metodologi untuk melakukan instrumentasi terhadap system • Module – Nama dari DTrace kernel module atau user library. • Function – Nama dari program fungsi • Name – Nama dari probe contoh: “fbt:zfs:arc_read:entry” Aggregasi. Sintaks Aggregasi Dtrace adalah @name[ keys ] = aggfunc ( args ). Sintaks ini dapat didefenisikan sebagai berikut : • name – Name variabel aggregasi yang didahului oleh karakter @. • keys – Kumpulan ekspresi D yang dipisahkan oleh simbol koma • aggfunc – Salah satu fungsi-fungsi aggregasi DTrace • args – Kumpulan argumen yang sesuai dengan fungsi aggregasi dipisahkan oleh simbol koma Predikat. Program D terdiri dari sekumpulan klausa-klausa probe. Klausa probe memiliki bentuk umum sebagai berikut: probe descriptions / predicate / { action statements } Berikutnya adalah Features • Dynamic instrumentation Zero probe effect ketika disable • Instrumentationnya disatukan atau sekaligus Instrument kernel dan applications yang dapat menelusuri flow-control melintas tanpa batas. • Kernel instrumentation. Instrumen terdapat di-kernel subsystems seperti virtual memory, synchronization, scheduler • Data Integrity dalam arti setiap error system atau program selalu dilaporkan Sebagai fitur yang paling digemborkan dalam Solaris versi 10, DTrace dapat digunakan sebagai: • DebuggingUntuk mengetahui rutin-rutin apa yang sedang dipanggil, argumen dan nilai balik dari setiap fungsi-fungsinya • Analisa KinerjaDapat diamati dimana aplikasi banyak menggunakan waktunya dan berapa lama. Digunakan untuk menggali lebih dalam dan menemukan penyebab utama masalah kinerja • ObservabilitasDTrace membantu pemahaman terhadap sistem. Dapat diketahui siapa yang memanggil sebuah fungsi dan fungsi-fungsi lain apa yang dipanggil oleh satu fungsi tertentu yang sedang dipanggil • Jangkauan Kode (Code Coverage)Sebagai piranti pengetes, DTrace digunakan untuk mengetahui apakah sebuah fungsi dipanggil dan dimana Dengan Tools yang ada DTrace dapat membolehkan user untuk : 1. Enable probes dengan cara : #dtrace -n BEGIN 2. Run D-language scripts dengan cara : # dtrace -s scriptQu.d 3. Mengamati properties dari DTrace framework di system yang bersangkutan dengan cara : #dtrace –l DTrace dapat digunakan pada saat kita ingin melakukan monitoring system, isalnya ketika hendak menyelidiki kernel subsystem. Di sini kita dapat memantau file systems, networks, zones, dan sebagaiya. Selain itu dapat Mengumpulkan information dari seluruh system melalui DExplorer tool serta melakukan Tuning system dan aplikasi Oiya, DTrace juga dapat digunakan untuk Web-development. Baik dengan Server-side (Ruby, Java,PHP,Groovy,Perl,Python) maupun dengan Client-side (Java-script); Tools (Apache, Glassfish, MySQL, PostgreSQL). Di samping itu, untuk kebutuhan software development, DTrace dapat digunakan untuk Debugging, Profiling, Memory leaks,Lost CPU cycles, Function calls, dan sebaganya. Gimana, masih mutuh info lebih lanjut? Open Solaris User Group Jogja siap membantu Anda Contoh Perintah Dtrace Program DTrace yang makin kompleks akan sulit jika dituliskan langsung di perintah baris. Perintah dtrace(1M) mendukung penggunaan skrip yang dispesifikasikan dengan opsi -s. Cara lain adalah dengan membuat file interpreter DTrace yang dapat dieksekusi langsung. File interpreter selalu diawali dengan baris: #!/usr/sbin/dtrace -s Contoh berikut adalah sebuah skrip yang merunut nama file-terksekusi pada saat terjadi titik-masuk setiap panggilan sistem: # cat syscall.d syscall:::entry { trace(execname); } Berdasarkan konvensi, skrip DTrace diberikan akhiran .d suffix. Berikutnya skrip ini dapat dijalankan dengan cara berikut ini: # dtrace -s sycall.d Jika file syscall.d ditambahkan izin-akses eksekusi dan tambahkan baris pertama-nya pathname ke interpreter dtrace maka selanjutnya skrip ini dapat dieksekusi secara langsung: #cat syscall.d #!/usr/sbin/dtrace -s syscall:entry { trace(execname); } # chmod +x syscall.d # ./syscall.d Predikat Program D terdiri dari sekumpulan klausa-klausa probe. Klausa probe memiliki bentuk umum sebagai berikut: probe descriptions / predicate / { action statements } Predikat (predicate) adalah ekspresi D yang terletak diantara simbol garis-miring / /. Predikat dievaluasi saat probe memicu untuk menentukan apakah aksi-aksi terkaitnya akan dieksekusi. Jika ekspresi D dievaluasi dengan nilai nol maka berarti false; jika dievaluasi dengan nilai bukan-nol maka berarti true. Penggunaan predikat bersifat opsional. Predikat selalu ditempatkan diantara deskripsi probe dan pernyataan aksi. |