Данные примеры работают не только на Solaris, но и на FreeBSD
Загрузка ЦПУ приложениями (можно использовать оба варианта)
dtrace -n 'syscall:::entry { @num[execname] = count(); }'
dtrace -n 'syscall:::entry { @num[pid,execname] = count(); }'
Статистика системных вызовов (syscalls)
dtrace -n 'syscall:::entry { @num[probefunc] = count(); }'
Статистика системных вызовов (syscalls) приложения MyApp (вывод в файл dtracefile)
dtrace -n 'syscall::MyApp:entry {@[ustack()] = count()}' > dtracefile
Статистика вызова самых частых потоков для MyApp
dtrace -n 'syscall::MyApp:entry {@[pid, tid] = count()}'
Файлы, открытые процессами (нужно делать перенаправление в файл)
dtrace -n 'syscall::open*:entry { printf("%s %s",execname,copyinstr(arg0)); }'
Новые процессы вместе с аргументами
dtrace -n 'proc:::exec-success { trace(curpsinfo->pr_psargs); }'
Стек для определённого pid’a при использовании функции close:
dtrace -n syscall::close:return'/pid == 26651/ { ustack(); }'
Подчёт количества потребляемой памяти запускаемым приложением:
dtrace -n 'syscall::mmap:entry { @ = sum(arg1); }' -c "bash test.sh"
Сетевые соединения
#!/usr/sbin/dtrace -qs
syscall::connect:entry
{
socks = (struct sockaddr*) copyin(arg1, arg2);
hport = (uint_t) socks->sa_data[0];
lport = (uint_t) socks->sa_data[1];
hport <<= 8;
port = hport + lport;
printf("%s: %d.%d.%d.%d:%d\n", execname, socks->sa_data[2], socks->sa_data[3], socks->sa_data[4], socks->sa_data[5], port);
}
Дополнение.
Достаточно примеров можно найти по следующим ссылками
http://www.solarisinternals.com/wiki/index.php/DTrace_Topics_One_Liners
http://www.brendangregg.com/DTrace/dtrace_oneliners.txt
http://www.brendangregg.com/dtrace.html#Scripts
https://freebsdfoundation.org/wp-content/uploads/2023/01/stolfa_dtrace.pdf
https://freebsdfoundation.org/wp-content/uploads/2014/05/DTrace.pdf
А здесь видео с dtrace.conf 2016
Ищем block size в ZFS/NFS/iSCSI