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. HDU-1312-Black and Red

    这题其实和POJ的1979是同一道题,当时POJ使用cin写的,所以读入的时候,就很正确. 这次用scanf读入的时候,就出现了问题,我们在读完宽高之后,要用getchar吸收掉回车,然后每行末尾的回 ...

  2. Verilog之delay的两种用法(inter/intra)

    verilog语言中有两种延迟方式:inter-delay和intra-delay,关于inter和intra.这两个英文前缀都有“内部,之间”的意思,但又有所不同.inter表达不同事物之间,int ...

  3. leepcode作业解析 - 5-19

    18.两数之和II -输入有序数组 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数. 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 ...

  4. python--MySQL 库,表的详细操作

    一 库操作 数据库命名规则 可以由数字,字母,下划线,@, #, $ 区分大小写 唯一性 不能使用关键字如 create  select 不能单独使用数字 最长128位 # 这些是对上次的补充. 二 ...

  5. Python-小游戏题目

    猜年龄游戏 n = 0 rayn_age = 19 a = {0:'666',1:'777',2:'888'} while n <3: age = input('请输入你的年龄:') age = ...

  6. Python多版本共存安装

    Python的安装 进入Python官方网站:www.python.org下载系统对应的Python版本 按照提示步奏安装,安装路径选择自定义,方便查找 安装完成后,按win+R键,输入cmd进入cm ...

  7. Android自动化测试Uiautomator--UiSelector接口简介

    UiSelector对象可以理解为一种条件对象,描述的是一种条件,可以配合UiObject使用得到某个符合条件的控件对象. 所有的方法都是public的,且都返回UiSelector类的对象. 文本方 ...

  8. visual studio 的生成、重新生成、清理功能的说明

    生成 生成当前选中的项目,依赖的项目如果已经生成dll,则不生成,直接拷贝过来 重新生成 生成当前选中的项目,依赖的项目也会生成 清理 清除掉生成的dll和相关文件

  9. Scrapy 应用之爬取《盗墓笔记》

    爬取<盗墓笔记>和爬取<宦海沉浮>原理一样,但是使用了两种不同的追踪链接的方式,<盗墓笔记>使用的是跟踪下一页链接,直至没有下一页为止,<宦海沉浮>则是 ...

  10. VOC Segmentation GT图像颜色表生成分析

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/52185581 PASCAL VOC图像 ...