Автор Тема: Полезные скрипты DTrace  (Прочитано 9956 раз)

Оффлайн keremet

  • Global Moderator
  • ROOT
  • *****
  • Сообщений: 463
  • Репутация: +237/-0
    • Просмотр профиля
    • OpenSolaris
Полезные скрипты DTrace
« : Май 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;

Оффлайн jSnake

  • ROOT
  • *****
  • Сообщений: 107
  • Репутация: +132/-0
    • ICQ клиент - 279320039
    • Просмотр профиля
    • E-mail
Re: Полезные скрипты DTrace
« Ответ #1 : Май 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.

Оффлайн jSnake

  • ROOT
  • *****
  • Сообщений: 107
  • Репутация: +132/-0
    • ICQ клиент - 279320039
    • Просмотр профиля
    • E-mail

Оффлайн keremet

  • Global Moderator
  • ROOT
  • *****
  • Сообщений: 463
  • Репутация: +237/-0
    • Просмотр профиля
    • OpenSolaris
Re: Полезные скрипты DTrace
« Ответ #3 : Август 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`