OpenSolaris, OpenIndiana, Nexenta Forum

OpenSolaris, OpenIndiana, Nexenta => OpenSolaris => Тема начата: keremet от Май 05, 2011, 10:20:35 pm

Название: Полезные скрипты DTrace
Отправлено: keremet от Май 05, 2011, 10:20:35 pm
Просмотр запускаемых процессов и их параметров:
dtrace -n 'proc:::exec-success { trace(curpsinfo->pr_psargs); }'
____
Получение графа вызовов функций в приложении a.out
$ cat a.out.d
#!/usr/sbin/dtrace -s
#pragma D option flowindent
pid$target:a.out::entry,
pid$target:a.out::return
{
}

Запуск: ./a.out.d -c a.out
_____
Какие файлы открывает psql
pfexec dtrace -n 'syscall::open:entry/execname=="psql"/{ printf("file:%s",copyinstr(arg0));}'
_____
Что запускает cron
dtrace -n 'syscall::exec*:entry/execname=="cron"/{ printf("file:%s",copyinstr(arg0));}'
_____
Пищать после завершения процесса 1444
dtrace -q -n "proc:::exit/pid==1444/{exit(0);}";while [ 1 ];do printf \\007; sleep 1;done;
Название: Re: Полезные скрипты DTrace
Отправлено: jSnake от Май 13, 2011, 01:18:08 pm
Дабы не засорять форум, скажу ссылками.

Top Ten DTrace (D) Scripts
http://prefetch.net/articles/solaris.dtracetopten.html
это раз.

Также искренне рекомендую заходить к этому парню (кстати, это автор книги по DTrace, которую выложил как раз в разделе "Книги"):
http://www.brendangregg.com/dtrace.html

Ну и разумеется http://www.dtrace.org, также много полезностей тут http://www.oracle.com/technetwork/systems/dtrace/dtrace/index-jsp-137532.html.
Название: Re: Полезные скрипты DTrace
Отправлено: jSnake от Май 13, 2011, 01:21:45 pm
Ой, ещё вдогонку.
http://www.solarisinternals.com/wiki/index.php/DTrace_Scripts
http://hub.opensolaris.org/bin/view/Community+Group+networking/dtrace_networking_cookbook
Название: Re: Полезные скрипты DTrace
Отправлено: keremet от Август 15, 2015, 03:29:42 pm
Определение времени, потраченного в сумме на каждую функцию. Скрипт подходит для многопоточных приложений.

$ cat a.out.d
#!/usr/sbin/dtrace -s
pid$1:a.out::entry{
   self->ts[probefunc] = timestamp;
}

pid$1:a.out::return
/self->ts[probefunc]/
{
   @func_time[probefunc] = sum(timestamp - self->ts[probefunc]);
   self->ts[probefunc] = 0;
}

Запуск pfexec ./a.out.d `pgrep a.out`