DTrace

Материал из Seo Wiki - Поисковая Оптимизация и Программирование
Перейти к навигацииПерейти к поиску

DTrace — фреймворк динамической трассировки, созданный корпорацией Sun Microsystems для выявления неправильной работы ядра и приложений на работающей системе в режиме реального времени. Изначально DTrace был создан для Solaris, затем был открыт под лицензией Common Development and Distribution Lisence (CDDL) и портирован на ряд Юникс-подобных систем.

DTrace может использоваться для наблюдения за количеством потребляемой памяти, процессорным временем, файловыми системами и сетевыми ресурсами, используемыми активными процессами, на работающей системе. Также можно получить более детальную информацию, например, список аргументов, с которыми вызывается каждая функция, или список процессов, использующих определённый файл.

Описание

Программы трассировки (называемые скриптами) записываются на языке D (не следует его путать с другим языком программирования «D»). Этот язык является производным от языка Си с дополнительными функциями и переменными, специфическими для трассировки. Программы на D по структуре напоминают программы awk; они состоят из списка, включающего одну или более проб (probe), которым соответствуют действия. Когда условие пробы удовлетворяется, выполняется соответствующее действие. Это может происходить, если открывается определённый файл, запускается процесс или исполняется определённая строка кода. Существует возможность передавать информацию от одной пробы другой.

DTrace безопасен для использования в работающей среде. Во время тестирования почти не происходит снижения производительности; это важно, потому что одновременно могут быть запущены десятки тысяч проб. Новые пробы могут быть созданы динамически.

Примеры использования

Скрипты DTrace могут быть запущены из командной строки, используя одну или более проб в качестве аргументов. Примеры:

# New processes with arguments,
dtrace -n 'proc:::exec-success { trace(curpsinfo->pr_psargs); }'

# Files opened by process,
dtrace -n 'syscall::open*:entry { printf("%s %s",execname,copyinstr(arg0)); }'

# Syscall count by program,
dtrace -n 'syscall:::entry { @num[execname] = count(); }'

# Syscall count by syscall,
dtrace -n 'syscall:::entry { @num[probefunc] = count(); }'

# Syscall count by process,
dtrace -n 'syscall:::entry { @num[pid,execname] = count(); }'

# Disk size by process,
dtrace -n 'io:::start { printf("%d %s %d",pid,execname,args[0]->b_bcount); }'   

# Pages paged in by process,
dtrace -n 'vminfo:::pgpgin { @pg[execname] = sum(arg0); }'

Поддерживаемые платформы

DTrace был представлен в ноябре 2003 года и был официально выпущен как часть операционной системы Solaris 10 в январе 2005-го. DTrace был первым компонентом проекта OpenSolaris, исходный код которого стал доступен под лицензией Common Development and Distribution License (CDDL).

DTrace был портирован в FreeBSD в качестве замены ktrace.

Apple добавила поддержку DTrace в Mac OS X 10.5 «Leopard», включая графическую программу Instruments. В отличие от других платформ, в Mac OS X существует флаг (P_LNOATTACH), установка которого делает невозможным трассировку процессов такими средствами как DTrace или gdb. Изначально это создавало проблемы, так как в результате применения этого флага не могла тестироваться другая системная информация. Эта проблема была решена через несколько месяцев в обновлении Mac OS X 10.5.3.

Поддержка DTrace также разрабатывается для QNX 6.

Из-за лицензии CDDL, несовместимой с GPL, портирование в Linux невозможно. Для линукса разрабатывается утилита с близкой функциональностью под названием SystemTap на основе механизма инструментирования kprobes.

Ссылки

На английском

На русском

ca:DTrace en:DTrace es:DTrace (Sun Microsystems) fr:DTrace ja:DTrace pl:DTrace

Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....