跳过导航链接 | |
退出打印视图 | |
![]() |
Oracle Solaris Studio 12.3:性能分析器 Oracle Solaris Studio 12.3 Information Library (简体中文) |
er_label 命令可以定义实验的一部分并为其分配名称或添加标签。标签捕获在实验中以开始时间和停止时间标记定义的一个或多个时间段内发生的分析事件。
可以将时间标记指定为当前时间、当前时间加上或减去某个时间偏移,或者指定为相对于实验开始时间的某个偏移。可以在标签中指定任何数量的时间间隔,并且在创建标签后,可以向标签添加其他间隔。
对于 er_label 实用程序,应该使用成对标记指定间隔:开始时间后面跟随停止时间。实用程序忽略出现顺序错误的标记,例如在任何开始标记前指定的停止标记,在上一个开始标记后面没有跟随任何停止标记而直接跟随的开始标记,或者在上一个停止标记后面没有跟随任何开始标记而直接跟随的停止标记。
您可通过在命令行运行 er_label 命令或在脚本中执行该命令来为实验分配标签。向实验添加标签后,便可以使用标签进行过滤。例如,您可能会对实验进行过滤,包含或排除在标签定义的时间段中的分析事件,如使用标签进行过滤中所述。
注 - 不应创建与可在过滤中使用的任何其他关键字相同的标签名称,因为这样会导致冲突和意外的结果。可以使用 er_print -describe 命令查看实验的关键字。
er_label 命令的语法为:
er_label -o experiment-name -n label-name -t {start|stop}[=time-specification] [-C comment
选项定义如下:
-o 实验名称。这是一个必需的选项,用于指定希望标记的实验的名称。只能指定一个实验名称,不支持实验组。-o 选项可以出现在命令行中的任意位置。
-n 标签名称。这是一个必需的选项,用于指定标签名称。标签只能包含字母数字,不能包含空格,但长度不限。如果实验中已存在标签,则指定的时间标记和注释将添加到标签中。-n 选项可以出现在命令行中的任意位置。
-C 注释。这是标签的注释,可选。注释可以包含在引号内,也可以不带引号,具体取决于 Shell 或脚本的要求。可以对单个标签使用多个 -C 选项,在显示标签时,这些注释将串联起来,相互之间使用空格分隔。可以使用多个注释,例如,在标签中提供每个时间间隔的信息。在标签中使用多个注释时,可能需要在每个注释结尾包含分隔符,例如分号。
-t start|stop =时间规范。这是用于定义实验中的时间范围的开始点或停止点规范。如果省略 =时间规范,则创建当前时间的标记。
可以按以下格式之一指定时间规范:
指定相对于实验开始的时间,在此处应该放置开始或停止标记。必须至少指定秒数,还可以选择指定小时数、分钟数和零点几秒。
指定的时间值将按以下方式解释:
如果指定不带冒号的整数,则将解释为秒数。如果值大于 60,则秒数在标签中将转换为 mm:ss。例如,-t start=120 会在实验开始后的 02:00 处放置一个开始标记。
如果包含任意精度的小数,则该值将解释为零点几秒,并且以纳秒精度进行保存。例如, -t start=120.3 会在实验开始后的 02:00.300(即 2 分 300 纳秒)处放置一个开始标记。
如果使用 nn:nn 格式指定时间,则将解释为 mm:ss;如果 mm 的值大于 60,则时间将转换为 hh:mm:ss。为 ss 指定的数字必须介于 0 和 59 之间,否则会出现错误。例如,-t start=90:30 会在实验开始后的 01:30:30(即 1 小时 30 分 30 秒)处放置一个开始标记。
如果使用 nn:nn:nn 格式指定时间,则将解释为 hh:mm:ss。为分钟和秒指定的数字必须介于 0 和 59 之间,否则会出现错误。例如,-t stop=01:45:10 会在实验开始后的 1 小时 45 分 10 秒处放置一个结束标记。
指定当前时间,以便在实验中执行 er_label 命令的那一刻放置一个标记。当前时间在命令的单个调用中设置一次,因此使用 @ 的任何其他标记将相对于该原始时间戳值设置。
指定当前时间戳之后的某个时间,其中偏移是一个使用与上面所述的相同 hh:mm:ss.uuu 规则的时间。此时间格式在原始时间戳之后的指定时间处放置一个标记。例如,-t stop=@+180 在当前时间之后的 3 分钟处放置一个停止标记。
指定当前时间戳之前的某个时间,其中偏移是一个使用与上面所述的相同 hh:mm:ss.uuu 规则的时间。此时间格式在原始时间戳之前的指定时间处放置一个标记。例如,-t start=@-20:00 在当前时间之前的 20 分钟处放置一个开始标记。如果实验的运行时间尚未达到 20 分钟,则将忽略该标记。
在单个 er_label 命令中可以使用多个 -t 规范,或者在相同标签名称的单独命令中使用多个 -t 规范,但它们应该按照成对的 -t start 和 -t stop 标记出现。
如果 -t start 或 -t stop 选项后面未跟随任何时间规范,则将为规范采用 =@。必须为其中一个标记包含时间规范。
示例 8-1 使用相对于实验开始的时间标记定义标签
要在实验 test.1.er 中定义名为 snap 的标签,其中涵盖从实验开始之后的 15 秒起持续时间为 10 分钟的运行部分,请使用以下命令:
% er_label -o test.1.er -n snap -t start=15 -t stop=10:15
此外,可以在单独的命令中为间隔指定标记:
% er_label -o test.1.er -n snap -t start=15 % er_label -o test.1.er -n snap -t stop=10:15
示例 8-2 使用相对于当前时间的时间标记定义标签
要在实验 test.1.er 中定义名为 last5mins 的标签,其中涵盖当前时间之前的 5 分钟起的运行部分,请执行以下操作:
% er_label -o test.1.er -n last5mins -t start=@-05:00 -t stop
er_label 的一个用途是支持将由客户端驱动的服务器程序作为一个独立的进程或多个进程进行分析。在这种使用模型中,使用 collect 命令启动服务器,以便开始在服务器上创建实验。服务器启动并准备好接受客户端请求后,您便可运行客户端脚本,以请求驱动服务器并运行 er_label 来标记发生客户端请求的实验部分。
以下示例客户机脚本在 test.1.er 实验中为针对服务器的每个请求运行生成一个时间标签。创建的五个标签中的每个标签都划分出处理指定请求所花费的时间。
for REQ in req1 req2 req3 req4 req5 do echo "==========================================================" echo " $REQ started at `date`" er_label -o test.1.er -n $REQ -t start=@ run_request $REQ er_label -o test.1.er -n $REQ -t stop=@ done
下面的示例脚本显示了一个备选用法,该脚本生成名为 all 的包含所有请求的单个标签。
for REQ in req1 req2 req3 req4 req5 do echo "==========================================================" echo " $REQ started at `date`" er_label -o test.1.er -n all -t start=@ run_request $REQ er_label -o test.1.er -n all -t stop done
请注意,在第二个 er_label 调用中的 -t stop 后面未跟随时间规范,因此缺省采用 stop=@。
可以创建更复杂的脚本,并且可以在相同节点或不同节点上同时运行多个脚本。如果实验位于所有节点都可访问的共享目录中,则脚本可以在相同的实验中标记间隔。各个脚本中的标签可以是相同的,也可以是不同的。