分享
 
 
 

Solaris10中新的Dtrace工具

王朝other·作者佚名  2006-04-30
窄屏简体版  字體: |||超大  

DTrace即动态跟踪Dynamic Tracing,是Solaris 10的一个新功能,透过此一新功能,用户能够动态检测操作系统内核和用户进程,以更精确地掌握系统的资源使用状况,提高系统性能,减少支持成本,并进行有效的调节。

1997年,供职于Sun而现已是Solaris内核开发部高级工程师的Bryan Cantrill 与他的工作组在紧张地研究一个性能问题,它出现在刚刚提及的Sun E10000服务器。该服务器在运行基准测试时,速度突然在一段时间内奇怪地降低。工作组经过六天夜以继日的工作后,终于发现了问题的根本原因。某个“愚蠢之极”的配置错误将服务器配置成了路由器。

“我很受震惊,”Cantrill 说到, “这是任何一个客户都可能遇到的问题,但是他们可不敢奢望让内核开发人员为之夜以继日地工作,编写自定义代码以弄清楚问题。我们得找出一个更好的方法。”

经过两年半的紧张开发,Cantrill和他的工作组终于研究出了这个更好的方法: Dtrace

DTrace是过去十年中在操作系统方面最具意义的革新之一:

Probe,Solaris中分散着30,000多的位置指针,也叫探测器probes,DTrace可激活成千上万的探测器,记录所关注的位置指定的数据,如命中,即可从该地址显示用户进程或系统内核的数据,从而了解系统,包括:

1。任何函数的参数

2。内核的任何全局变量

3。函数调用的时间(NS,十亿分之一秒,无任何其它PC/Unix在ns一级精度)

4。跟踪堆栈,包括指明函数调用的代码

5。函数调用时运行的进程

6。产生函数调用的线程

Probe于自定义D语言程序相关联,probe表示的格式为:

provider:module:function:name

1。显示当前动态系统中的动态Dtrace探针probe:

# dtrace -l |more

ID PROVIDER MODULE FUNCTION NAME

1 dtrace BEGIN

2 dtrace END

3 dtrace ERROR

4 vminfo fasttrap fasttrap_uwrite softlock

5 vminfo fasttrap fasttrap_uread softlock

6 fbt pool pool_open entry

7 fbt pool pool_open return

8 fbt pool pool_close entry

9 fbt pool pool_close return

10 fbt pool pool_ioctl entry

11 fbt pool pool_ioctl return

12 fbt pool pool_info entry

13 fbt pool pool_info return

。。。

43545 fbt zmod z_strerror return

43546 fbt zmod z_uncompress entry

43547 fbt zmod z_uncompress return

即当前本人V210上有43547个probe。

2。体验 dtrace 与 Unix ps 命令:

如用ps看mozilla进程:

# ps -e |grep mozilla

2386 pts/11 0:00 mozilla

2436 pts/11 10:12 mozilla-

也可使用dtrace 通过probe探针看:

# dtrace -n 'syscall::exece:return { trace(execname);}'

dtrace: description 'syscall::exece:return ' matched 1 probe

CPU ID FUNCTION:NAME

0 11082 exece:return uname

0 11082 exece:return uname

0 11082 exece:return basename

。。。

0 11082 exece:return sed

0 11082 exece:return mozilla-bin

1 11082 exece:return csh

1 11082 exece:return mozilla

。。。

2。实际dtrace看的更细,

如用date显示系统时间,很快就结束了,无法跟踪,体验dtrace跟踪效果:

% date

2005年05月24日 星期二 20时39分03秒 CST

# dtrace -n 'syscall::exece: {trace(timestamp)}'

ddtrace: description 'syscall::exece: ' matched 2 probes

CPU ID FUNCTION:NAME

0 11081 exece:entry 102890531281542

0 11082 exece:return 102890532181875

即可跟踪其在第102890531281542纳秒开始读取,第102890532181875返回结果。

3。体验Dtrace 对系统调用更多的观察:

如看机器忙闲状态,常用vmstat:

# vmstat 1

kthr memory page disk faults cpu

r b w swap free re mf pi po fr de sr s0 s3 s1 s1 in sy cs us sy id

0 0 0 5523680 1378352 14 48 84 1 0 0 1 0 1 0 0 341 2058 883 3 1 96

0 0 0 5368296 1218688 0 23 15 0 0 0 0 0 0 0 0 336 2605 722 10 1 89

得知产生2605多系统调用,但无和简单查找哪个进程的问题呢,试用dtrace看:

# dtrace -n 'syscall::read:entry {@NUM[execname] = count();}'

ddtrace: description 'syscall::read:entry ' matched 1 probe

^C

dtfile 5

sdtperfmeter 12

soffice.bin 23

dic 23

dtterm 53

mozilla-bin 394

Xsun 545

显然发现CDE和Mozilla是产生大量系统调用的程序,看I/O分布也可:

如还是Mozilla:

# dtrace -n 'syscall::write:entry {@NUM[execname] = quantize(arg2);}'

...

mozilla-bin

value ------------- Distribution ------------- count

0 | 0

1 |@@@@@@@@@@@@@@@@@@@@@ 470

2 | 0

4 | 7

8 | 0

16 | 0

32 | 0

64 | 0

128 | 10

256 |@@@@@@@@ 184

512 |@@@@@@ 146

1024 |@@@ 78

2048 | 8

4096 | 1

8192 | 0

...

可观察到大量Mozilla产生的I/O在256-512字节间。

4。 想再仔细看程序内部情况?

truss不错:

# truss /usr/sfw/bin/mozilla

execve("/usr/bin/ksh", 0xFFBFF564, 0xFFBFF574) argc = 3

resolvepath("/usr/bin/ksh", "/usr/bin/ksh", 1023) = 12

resolvepath("/usr/lib/ld.so.1", "/lib/ld.so.1", 1023) = 12

stat("/usr/bin/ksh", 0xFFBFF340) = 0

open("/var/ld/ld.config", O_RDONLY) Err#2 ENOENT

stat("/lib/libc.so.1", 0xFFBFEE70) = 0

resolvepath("/lib/libc.so.1", "/lib/libc.so.1", 1023) = 14

open("/lib/libc.so.1", O_RDONLY) = 3

mmap(0x00010000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_ALIGN, 3, 。。。

试下dtrace:

# dtrace -n 'syscall::read:return /execname =="mozilla" /{ ustack();}'

dtrace: description 'syscall::read:return ' matched 1 probe

CPU ID FUNCTION:NAME

0 10984 read:return

libc.so.1`_read+0x8

ksh`io_readbuff+0x264

ksh`0x245e4

ksh`io_readc+0x2c

ksh`0x29c54

ksh`main+0xa30

ksh`_start+0x108

0 10984 read:return

libc.so.1`_read+0x8

ksh`io_readbuff+0x264

ksh`0x245e4

ksh`io_readc+0x2c

ksh`0x28938

ksh`0x28654

...

看到n多调用,开始和返回,够开发人员分析的。

总结,Dtrace功能强大,精度高,轻量,truss有时降低系统30%CPU利用率。但复杂,需对系统内核和应用熟悉,否则看不懂跟踪到的数据,估计以后CU该开Dtrace编程板块了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有