dtrace linux_将DTrace探针添加到您的应用程序

Solaris(包括OpenSolaris),FreeBSD和Mac OS X内置的动态跟踪(DTrace)功能为动态跟踪应用程序提供了简单的环境。 与调试不同,DTrace可以随意打开或关闭,并且您无需提供特殊的应用程序构建即可利用跟踪功能。

以上所有平台均支持使用标准DTrace探针。 涵盖了操作系统在代码内不同功能边界上公开的内容。 这些探针(称为功能边界跟踪(FBT))使您可以识别何时开始或停止执行给定功能。

此功能的局限性在于它只能用于探测应用程序的功能,而不能用于探测功能片段。 如果要检查构成单个操作的多个功能的执行情况,或者要查看单个功能的一部分,FBT则无济于事。

对于您自己的应用程序,您可以使用用户域静态定义的跟踪(USDT)解决此问题。 USDT使您作为开发人员能够在您认为重要的代码点上为应用程序添加特定的探针。 USDT系统还使您能够从正在运行的应用程序中公开数据,在跟踪应用程序时可以将其作为探针的参数进行访问。

在开始将USDT探针添加到系统之前,首先需要考虑要报告的探针,探针可能提供的信息以及潜在的性能问题。

探头设计

一旦确定标准FBT探针不适合您的需求,就需要开始考虑将静态探针添加到您的应用程序中。

使用DTrace向应用程序添加探针时,首先要考虑的是首先确定实际使用探针的目的。 探针可以帮助您识别各种问题和信息,但是您应该针对探针。 您应该挑选出特定的区域,例如功能,性能或其他可测量的信息,这些信息超出了仅使用所有功能障碍中提供的标准进入/退出探测器所能找到的范围。

因此,从简单的角度来看,您应该考虑有两种主要的探针类型:

  1. 信息探针 :这些信息探针会暴露或总结一条信息,否则这些信息在程序执行过程中将很难确定。 这里的好例子包括内部结构的大小或内容,或者不是由函数直接处理的事件的操作或触发。 现有的操作系​​统探针中有许多示例。 例如,您可以获得有关磁盘I / O统计信息或虚拟内存系统内故障的信息。
  2. 操作探针 :这些探针将特定事件或语句序列括起来,以便您可以使用它们在序列的开头和结尾获取有关内部结构的特定信息,或监视一组特定语句的执行时间。 因为您可以将这些探针放置在任何地方以指示操作的开始和结束,所以它们可以跨越多个功能,或者仅覆盖给定功能的一小部分。 这些功能比使用可能提供过多或不足范围的功能边界更为实用。 按照惯例,这些探针通常以start和done作为后缀。

确定探针的类型后,下一步要考虑的是是否要在探针中公开任何其他信息,如果是,则要提供什么信息以及采用哪种格式。 在DTrace中,探针可以通过参数公开信息,这些参数可在编写合适的DTrace脚本或单行代码时进行处理。 例如,如果要检测文件I / O功能,则可以将要写入文件的名称添加到该功能的探针中。

在定义探测器时, probe write__file__start(int id, char *filename);这些参数指定名称和类型: probe write__file__start(int id, char *filename);

在监视期间在DTrace脚本中使用时,每个参数都可以在名为arg0arg1等的变量中使用。因此,可以使用第二个参数使用以下命令打印文件名: printf("%s\n", copyinstr(arg1));

选择合适的数据进行公开是一种在监视应用程序的同时了解要从探针中获取什么的情况。 例如,在上面的I / O函数示例中,如果函数用于写入多个文件,则知道文件名可能很关键。 但是,如果函数仅写入同一文件,则没有必要在探针中公开此信息。

因此,您必须考虑如何呈现信息。 您是否希望能够按操作类型,文件或网络端口来汇总数据? 您想知道数据大小还是实际写入的数据? 所有这些都是特定于程序和环境的。

以这种方式提供信息也有开销,您应该尽量避免共享信息,尤其是大型结构。 相反,您应该尝试提供有限的信息,或者在可能的情况下提供摘要信息(尽管请注意,出于DTrace探针的目的而复制,缩短或重新格式化字符串将产生更大的影响)。

有两种以这种方式引入探针的方法可能会有用:多种探针,以及使用特殊的“是否启用了探针?”。 包围。 当您编写探针并使用dtrace命令生成头文件时,将以非常简单的方式支持后一种解决方案。 您可以围绕代码块以确定是否已启用探针(例如,正在对其进行主动监视),并执行其他操作,这在需要汇总或整理数据时非常有用(请参见

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值