http://www.ohsdba.cn/index.php?g=Home&m=Article&a=show&id=171

 
时间: 2016-10-09 00:40:04  | 作者: ohsdba  | English 
如非注明,本站文章皆为原创。欢迎转载,转载时请注明出处和作者信息。
DTrace(dynamic tracing)是Sun Solaris系统上主要的性能诊断工具,可以对kernel和用户应用程序进行动态跟踪,并且对系统运行不构成任何危险的技术,后被Oracle公司收购,遵循CDDL(Common Development and Distribution License),后来Oracle把这一技术移植到了Oracle Linux(在2012年12月正式发布)。到目前为止,Oracle Linux的DTrace仅限于Oracle Unbreakable Enterprise Kernel,无法兼容其他发行版Linux,在当时也引起了一场纷争(http://lwn.net/Articles/483107/)。

在Oracle Linux上使用DTrace可以帮你
    观察整个软件体系、操作系统内核、系统库和应用程序的动态运行时性能
    通过在运行时定义实时探测点识别性能瓶颈
    开发探测器在谓词控制下触发时执行的脚本
    检测并报告内存访问错误,而不是听任系统崩溃

如何安装dtrace

一般情况下,DTrace软件包不能从Public yum上获取,必须先注册ULN(Unbreakable Linux Network),然后才能下载和安装

yum install dtrace-utils

注意:在安装dtrace-utils之前需要安装dtrace-modules(这个可以从公共yum上获取)

其实只需要一个dtrace-utils的包,需要这个包做测试的,可以发信息给我(只限测试学习测试使用)

[root@ovm ~]# rpm -ivh dtrace-utils-0.5.0-4.el6.x86_64.rpm
Preparing... ########################################### [100%]
1:dtrace-utils ########################################### [100%]
[root@ovm ~]#
[root@ovm ~]# ls -l /usr/sbin/dtrace
-rwxr-xr-x. 1 root root 36880 Nov 4 2015 /usr/sbin/dtrace
[root@ovm ~]#

dtrace帮助信息

[root@ovm ~]# dtrace
Usage: dtrace [-32|-64] [-aACeFGhHlqSvVwZ] [-b bufsz] [-c cmd] [-D name[=def]]
[-I path] [-L path] [-o output] [-p pid] [-s script] [-U name]
[-x opt[=val]] [-X a|c|s|t] [-P provider [[ predicate ] action ]]
[-m [ provider: ] module [[ predicate ] action ]]
[-f [[ provider: ] module: ] func [[ predicate ] action ]]
[-n [[[ provider: ] module: ] func: ] name [[ predicate ] action ]]
[-i probe-id [[ predicate ] action ]] [ args ... ] predicate -> '/' D-expression '/'
action -> '{' D-statements '}' -32 generate 32-bit D programs and ELF files
-64 generate 64-bit D programs and ELF files -a claim anonymous tracing state
-A generate driver.conf(4) directives for anonymous tracing
-b set trace buffer size
-c run specified command and exit upon its completion
-C run cpp(1) preprocessor on script files
-D define symbol when invoking preprocessor
-e exit after compiling request but prior to enabling probes
-f enable or list probes matching the specified function name
-F coalesce trace output by function
-G generate an ELF file containing embedded dtrace program
-h generate a header file with definitions for static probes
-H print included files when invoking preprocessor
-i enable or list probes matching the specified probe id
-I add include directory to preprocessor search path
-l list probes matching specified criteria
-L add library directory to library search path
-m enable or list probes matching the specified module name
-n enable or list probes matching the specified probe name
-o set output file
-p grab specified process-ID and cache its symbol tables
-P enable or list probes matching the specified provider name
-q set quiet mode (only output explicitly traced data)
-s enable or list probes according to the specified D script
-S print D compiler intermediate code
-U undefine symbol when invoking preprocessor
-v set verbose mode (report stability attributes, arguments)
-V report DTrace API version
-w permit destructive actions
-x enable or modify compiler and tracing options
-X specify ISO C conformance settings for preprocessor
-Z permit probe descriptions that match zero probes
[root@ovm ~]#

探测器和提供程序

要使用DTrace,需要指定内核中感兴趣的位置(称为探测器),DTrace可以绑定一个请求来执行一组操作,如记录堆栈跟踪、时间戳或函数参数。探测器的作用类似于深埋于操作系统中用于记录信息的可编程遥感传感器。探测器触发时,DTrace会从其收集数据并向您回报数据。Oracle Linux DTrace探测器运行于被称作提供程序的DTrace内核模块中,提供程序执行插装以支持探测器。

如何使用modprobe命令加载支持您需要使用的DTrace探测器的模块。例如,如果要使用proc提供程序发布的探测器,将加载systrace模块:

# modprobe systrace

内核模块列表

  内核模块 说明
dtrace dtrace 为 DTrace 本身提供探测器:BEGIN、END、ERROR,用于可选地在跟踪开始之前初始化 DTrace、执行跟踪后处理、处理执行期间其他探测器中的意外错误。
io io 提供与数据输入和输出有关的监视探测器。
proc proc 为监视进程创建和终止、新程序映像执行以及发送和处理信号提供探测器。
profile profile 提供与定时中断关联的探测器。可以使用这些探测器以固定时间间隔对系统状态进行采样。
sched sdt 提供与 CPU 调度有关的探测器。
sdt sdt 提供静态定义的、位于内核中多个感兴趣的重要位置的跟踪探测器。
syscall systrace 在每个系统调用的入口点和返回点提供探测器。这些探测器对了解应用程序与底层系统之间的交互尤为有用。

DTrace探测器来自一组被称作提供程序的内核模块,每个提供程序执行特定类型的插装来创建探测器。使用DTrace时,每个提供程序都有机会发布它可以为DTrace框架提供的探测器。然后,您可以对已发布的任何探测器启用和绑定跟踪操作。要列出系统上的所有可用探测器,可以使用dtrace -l。根据Oracle Linux平台、安装的软件和加载的提供程序模块的不同,探测器的数量也不同。

[root@ovm ~]# dtrace -l|wc -l
622
[root@ovm ~]#
[root@ovm ~]# dtrace -l|more
ID PROVIDER MODULE FUNCTION NAME
1 dtrace BEGIN
2 dtrace END
3 dtrace ERROR

每个探测器都显示一个整数 ID 和一个易于理解的名称,由四部分组成,在 dtrace 输出中显示为单独的四列。

    provider  — 发布此探测器的 DTrace 提供程序的名称。提供程序名称通常对应于执行插装以启用探测器的 DTrace 内核模块的名称
module — 如果此探测器对应于特定程序位置,则为探测器所在内核模块的名称
function — 如果此探测器对应于特定程序位置,则为探测器所在程序函数的名称
name — 探测器名称的最后一部分,即表明探测器语义的名称

当提及具体探测器时,这些部分一起显示,中间用冒号分隔,如:
provider:module:function:name

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); }'

调用D语言脚本syscalls.d显示进程3961正在使用的系统调用及其频率

[root@ovm ~]# cat syscalls.d
#!/usr/sbin/dtrace -qs
syscall:::entry
/pid == $1/
{
@num[probefunc] = count();
}
[root@ovm ~]# ./syscalls.d 3961
^C rt_sigreturn 1
shutdown 1
accept 2
clone 3
connect 3
gettid 3
set_robust_list 3
socket 3
exit 4
getsockopt 4
getsockname 5
madvise 5
close 6
dup2 6
sched_getaffinity 6
mmap 7
epoll_ctl 10
rt_sigprocmask 13
setsockopt 13
fcntl 15
write 17
read 23
epoll_wait 39
mprotect 51
newstat 84
ioctl 95
poll 140
sendto 265
recvfrom 284
futex 1714
[root@ovm ~]#

Reference
https://en.wikipedia.org/wiki/DTrace
http://docs.oracle.com/cd/E37670_01/E50705/html/ol_intro_dtrace.html
http://docs.oracle.com/cd/E37670_01/E38608/html/dt_gs_about.html
http://www.oracle.com/technetwork/cn/articles/servers-storage-admin/dtrace-on-linux-1956556-zhs.html
http://dtrace.org/blogs/
http://dtrace.org/guide/preface.html
https://blogs.oracle.com/linux/entry/announcement_dtrace_for_oracle_linux
http://www.ibm.com/developerworks/cn/aix/library/au-dtraceprobes.html
http://www.oracle.com/technetwork/server-storage/solaris10/solaris-dtrace-wp-167895.pdf

https://github.com/dtrace4linux/linux

在Oracle Linux上安装dtrace的更多相关文章

  1. 在 Oracle Linux 上使用 DTrace

    作者:Richard Friedman 简要介绍适用于 Oracle Linux 的 DTrace 探测器和提供程序,以及与 Oracle Solaris 中 DTrace 探测器和提供程序的区别.还 ...

  2. 在Oracle Linux上使用DTrace的相关指导

    如果你使用的Oracle Linux,因为sun被Oracle收购后,Oracle Linux版本的DTrace可以直接在Oracle官网进行下载. 下载地址 http://www.oracle.co ...

  3. 数据库系统入门 | Oracle Linux上部署Oracle 11g服务,并实现SSH远程登录管理

    文章目录 写在前面 一.实验内容 二.实验前期准备 1.软件目录 2.准备一些配置文件.脚本文件 三.实验方案(具体步骤) (一)在虚拟机上安装Oracle Linux (二)在Linux上安装Ora ...

  4. 在Linux上安装Oracle RAC 12 c(12.1) 虚拟机,一步一步向导

    Oracle RAC 12 c(12.1)在Linux上安装虚拟机,一步一步向导 今天我们将看到如何安装 12 c版本1 RAC(真正的应用程序集群)数据库2 Linux 64位的虚拟机 使用VMWa ...

  5. linux上安装oracle

    Linux上安装Oracle 10g:  http://69520.blog.51cto.com/59520/91156

  6. [转载]linux上安装oracle

    原文地址:linux上安装oracle作者:天涯恨客 1.创建oinstall组 [root@xieqing ~]# groupadd oinstall 创建dba组 [root@xieqing ~] ...

  7. 最全Pycharm教程(32)——依据FHS在Linux上安装Pycharm

    1.主题 怎样在Linux上安装Pycharm,依据FHS. 2.平台要求 Intel Pentium III/800 MHz或更高. 内存最小512M.建议1G以上 屏幕最小分辨率1024x768 ...

  8. CentOS Linux上安装Oracle11g笔记

    CentOS Linux上安装Oracle11g 到 otn.oracle.com 网站上下载 Linux版的oracle 11g 编辑 /etc/sysctl.conf : kernel.shmal ...

  9. Linux 上安装 weblogic12C (远程图形界面安装) (二)

    上一篇Linux 上安装 weblogic12C (静默安装)介绍了静默方式安装weblogic12C的方式,这一篇主要介绍在windows主机上通过远程图形界面的方式安装weblogic的方式 一. ...

随机推荐

  1. (34)zabbix Queue队列

    概述 queue(队列)显示监控项等待刷新的时间,可以看到每种agent类型刷新时间,通过queue可以更好的体现出监控的一个指标.正常情况下,是一片绿色. 如果出现过多红色,那么需要留意一下.我们也 ...

  2. NFS基础优化

    一.环境 环境接上篇 https://www.cnblogs.com/suffergtf/p/9486250.html 二.参数详解 1.nfsserver端配置参数详解 [root@nfsserve ...

  3. 验证debug思路之从寄存器开始

    对于boot a peripherial or module 一般都是配置一系列的寄存器(有可能有时间等方便的写入读出要求). 1.确保寄存器的读写按spec要求完成.<====可以通过波形查看 ...

  4. perl学习之:read

    perl read()函数例子,read()函数实例代码 - 读取,或试图读取,长度LENGTH 与文件句柄FILEHANDLE 相关联的文件到缓冲区BUFFER中的字节数. 语法 read FILE ...

  5. Could not connect to Redis at IP No route to host

    这个问题是在用远程去访问redis出现的 原因:是服务器新装系统  iptables这个的问题 解决办法: sudo iptables -F 轻松解决

  6. Django REST framework 五种增删改查方法

    Django-DRF-视图的演变   版本一(基于类视图APIView类) views.py: APIView是继承的Django View视图的. 1 from .serializers impor ...

  7. HDU 4089 && UVa 1498 Activation 带环的概率DP

    要在HDU上交的话,要用滚动数组优化一下空间. 这道题想了很久,也算是想明白了,就好好写一下吧. P1:激活游戏失败,再次尝试. P2:连接失服务器败,从队首排到队尾. P3:激活游戏成功,队首的人出 ...

  8. hadoop学习爬坑记录

    1. Q: hdfs管理界面50070端口设置后,无法访问情况. A: 1)停止当前所有服务./stop-all.sh 2)在hdfs-site.xml中,更改开放端口的绑定IP: <prope ...

  9. Programming Python 3rd Edition 第三版 pdf chm下载

    Programming Python 作为一款经典系列书籍 非常的耐看 建议有志于学习python的童鞋好好看看 网上 Programming Python第四版的 pdf 下载非常容易 也就是最新的 ...

  10. [uiautomator篇][python] wifi接口学习网址

    https://wifi.readthedocs.io/en/latest/wifi_command.html#usage