Я хотел работать над проблемой на коробке Centos 6. Я запустил Dtrace, и это не удалось. Он не принимает -n
или -l
или -P
или любые параметры командной строки. Он утверждает, что только принять -h
, -G
, -C
, -I
, -s
, и -o
. Я подумал, что это, должно быть, какая-то странная вещь из Centos, поэтому я пошел проверять коробку Fedora 22. Та же проблема. Он принимает только очень ограниченное количество параметров командной строки. Я пошел попробовать Oracle, который очень похож на Centos и RedHat похож на Fedora. Работало нормально. Я смог просто запустить dtrace
и получить длинный список всех параметров командной строки. Я вернулся в Centos и Fedora. Когда я вхожу dtrace
, выводUsage /bin/dtrace [--help] [-h | -G] [-C [-I<Path>]] -s File.d [-o <File>]
, Итак, после часа поиска в Google, я сдался. Как заставить dtrace правильно работать на Centos / Fedora? Я пробовал как как пользователь root, так и пользователь. Я искал пакеты для увеличения функциональности. Я пытался удалить и переустановить dtrace. Осталось только удалить пакет и установить dtrace из исходного кода.
8
dtrace -n BEGIN
(показывает трассировку). На машинах Centos / Fedora я получаю сообщение об ошибке использования, поскольку -n не поддерживается. Параметры командной строки почти не поддерживаются.Ответы:
Dtrace, который вы найдете в Oracle Linux, не является dtrace, который поставляется с системной записью Linux и который вы найдете в любом другом дистрибутиве Linux.
Скорее, это порт Solaris dtrace, предоставляемый Oracle и доступный только в Oracle Linux.
Две команды совершенно разные и имеют разные цели.
Стандартное средство трассировки ядра Linux известно как systemtap, а Oracle dtrace является всего лишь фирменной оболочкой для этого. Вы всегда можете использовать systemtap напрямую .
источник
dtrace
Скрипт , который приходит на не-Oracle Linux дистрибутивов это маленький инструмент изsystemtap
проекта. Он предоставляет только<sys/sdt.h>
связанные функции создания объекта / заголовочного файла в Solaris dtrace. Он сопоставляет его со структурами данных systemtap, поэтомуstap -L 'process("a.out").mark("*")
зонды перечисляют контрольно-измерительные приборы.источник
Теперь вы можете использовать BPFtrace!
https://github.com/iovisor/bpftrace
BPFtrace is a high-level tracing language for Linux enhanced Berkeley Packet Filter (eBPF) available in recent Linux kernels (4.x). BPFtrace uses LLVM as a backend to compile scripts to BPF-bytecode and makes use of BCC for interacting with the Linux BPF system, as well as existing Linux tracing capabilities: kernel dynamic tracing (kprobes), user-level dynamic tracing (uprobes), and tracepoints. The BPFtrace language is inspired by awk and C, and predecessor tracers such as DTrace and SystemTap. BPFtrace was created by Alastair Robertson.
Старый ответ:
You can install the Linux port of Sun/Oracle dtrace from source here: https://github.com/dtrace4linux/linux
источник