在Oracle Linux上安装dtrace
http://www.ohsdba.cn/index.php?g=Home&m=Article&a=show&id=171
如非注明,本站文章皆为原创。欢迎转载,转载时请注明出处和作者信息。
在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的更多相关文章
- 在 Oracle Linux 上使用 DTrace
作者:Richard Friedman 简要介绍适用于 Oracle Linux 的 DTrace 探测器和提供程序,以及与 Oracle Solaris 中 DTrace 探测器和提供程序的区别.还 ...
- 在Oracle Linux上使用DTrace的相关指导
如果你使用的Oracle Linux,因为sun被Oracle收购后,Oracle Linux版本的DTrace可以直接在Oracle官网进行下载. 下载地址 http://www.oracle.co ...
- 数据库系统入门 | Oracle Linux上部署Oracle 11g服务,并实现SSH远程登录管理
文章目录 写在前面 一.实验内容 二.实验前期准备 1.软件目录 2.准备一些配置文件.脚本文件 三.实验方案(具体步骤) (一)在虚拟机上安装Oracle Linux (二)在Linux上安装Ora ...
- 在Linux上安装Oracle RAC 12 c(12.1) 虚拟机,一步一步向导
Oracle RAC 12 c(12.1)在Linux上安装虚拟机,一步一步向导 今天我们将看到如何安装 12 c版本1 RAC(真正的应用程序集群)数据库2 Linux 64位的虚拟机 使用VMWa ...
- linux上安装oracle
Linux上安装Oracle 10g: http://69520.blog.51cto.com/59520/91156
- [转载]linux上安装oracle
原文地址:linux上安装oracle作者:天涯恨客 1.创建oinstall组 [root@xieqing ~]# groupadd oinstall 创建dba组 [root@xieqing ~] ...
- 最全Pycharm教程(32)——依据FHS在Linux上安装Pycharm
1.主题 怎样在Linux上安装Pycharm,依据FHS. 2.平台要求 Intel Pentium III/800 MHz或更高. 内存最小512M.建议1G以上 屏幕最小分辨率1024x768 ...
- CentOS Linux上安装Oracle11g笔记
CentOS Linux上安装Oracle11g 到 otn.oracle.com 网站上下载 Linux版的oracle 11g 编辑 /etc/sysctl.conf : kernel.shmal ...
- Linux 上安装 weblogic12C (远程图形界面安装) (二)
上一篇Linux 上安装 weblogic12C (静默安装)介绍了静默方式安装weblogic12C的方式,这一篇主要介绍在windows主机上通过远程图形界面的方式安装weblogic的方式 一. ...
随机推荐
- webpack执行命令的不同方式
如使用webpack3及之前的版本只需安装webpack3即可,因为之前的webpack里面集成了webpack-cli 1. 使用局部安装webpack和webpack-cli,使用package. ...
- tkinter学习-文本框
阅读目录 Entry 输入框 Text 文本框 Entry: 说明:输入控件,用于显示简单的文本内容 属性:在输入框中用代码添加和删除内容,同样也是用insert()和delete()方法 from ...
- modelsim安装调试
modelsim,debug:“unable to checkout a viewer license necessary for use of the modelsim graphical user ...
- redis 散列学习要点记录
散列类型键值也是种字典结构,存储了字段和字段值的映射,字段值只能是字符串,不可以是其他类型(redis数据类型都不可嵌套使用其他类型),散列类型键可以有2的32次方减1个字段 散列的命令组 hset ...
- python--MySQl单表查询
一. 关键字的执行优先级(重点) from where group by having # 使用是要放在group by 后面而且前面必须有group by select distinct # 去重 ...
- Day05基本运算符,if判断和while循环
day05 1.常量 变量名全大写 2.基本运算符 ①算术运算 10/3除法 10//3取整 10*3乘法 10**3幂 ②赋值运算 增量赋值 age += 1#age = age + 1 age * ...
- Handler处理器和自定义Opener
Handler处理器 和 自定义Opener opener是 urllib2.OpenerDirector 的实例,我们之前一直都在使用的urlopen,它是一个特殊的opener(也就是模块帮我们构 ...
- java 简单秒杀
以下代码 不考虑多服务器 限制线程池的大小 和队列的限制来实现 package org.zhang; import java.util.concurrent.BlockingQueue; import ...
- Myeclipse 添加Android开发工具
1.JDK是必须的,同时配置相应环境变量. 2.Android SDK 下载后解压缩需要把SDK目录下的tools和platform-tools加入环境变量. 3.MyEclipse中安装ADT插件 ...
- Java-字符转比较
实用的字符串比较方法 package com.tj; public class MyClass implements Cloneable { public static void main(Strin ...