ksh_timer时间接口

简介

ksh_timer 被设计用来帮助 ksh 或 ksh93 脚本管理员或开发人员计算每个函数及其 shell 脚本用户定义部分所用的时间。

以下几个要点定义了 ksh_timer 的功能:

如果在 ksh_timer 中运行脚本,那么该脚本调用的函数是自动计时的。

用户使用 ##KTB <section_name>(这部分的开始)和 ##KTE <section_name>(这部分的结束)在脚本中心 定义相关部分。

给出的时间是总运行时间,不是已使用的时间。

输出包括 ? Main ? 时间,这是脚本的总运行时间。

还包括去向不明的输出 时间,这些时间是花费在函数或用户定义部分之外的 ? Main ? 部分中的时间。

去 向不明的时间还包括计算函数引起的 ksh_timer 开销。

ksh_timer 支持 ksh 和 ksh93 脚本的执行。

使用:ksh_timer [-D] [-c] [-?] [-s] [script name arguments ...]

-D 将 ksh_timer 置于调试模式。

-c 保留原始输出文件 (ksh_timer.<script_name>.<pid>.out)。通常在执行后删除。

-s [script name arguments ...] 脚本文件名和脚本所需参数。

-? 打印使用情况。

重要提示

该接口 (ksh_timer) 是为了用户方便而提供的。本文使用一个样例程序说明了 ksh_timer 的用法和功能,工具 是按原样提供的,我们不提供任何担保和支持。

该工具已在 IBM? AIX? 5.3,6.1 和 7.1 版本上 进行了测试。ksh_timer 可以用于其他操作系统,要实现这一点,必须使用本文安装 小节中提供的源代 码,为该操作系统重新构建 ksh_timer_c 可执行文件。

概述

在启动时,ksh_timer 会读 取命令行提供的输入脚本,然后从中构建以下 3 个文件(源文件、计时器文件和 exec 文件)。

源文件包含原函数定义,并且来自 exec 文件。

计时器文件包含包括计时代码和调 用原函数的封装函数。计时器文件也来自 exec 文件。在下列示例中,原函数 f1 在源文件中被重命名为 f1_orig ,而在计时器文件中,f1 有一个计时代码包含 f1_orig 函数,该函数使我们能够得到原函数 f1 所耗的时间。

exec 文件是源文件和计时器文件的来源,而且包含原始 main 代 码以及用于任何用户定义部分的计时器代码。

当完成这些文件的构建之后,ksh_timer 会运行构 建 exec 文件。运行原始代码时,该函数会计算函数和用户定义部分的运行时间,并将这些时间写入输出 文件。执行完这些操作之后,它会分析输出文件,然后计算函数名、缩进、迭代次数以及这些函数或代码 部分的最小、最大、平均和总运行时间,并将它们显示在屏幕上。

使用以下输入脚本样例: ksh_timer.test_pres

#! /usr/bin/ksh
f1()
{
echo "hello"
}
#Main
##KTB user_defined_section
sleep 1
f1
##KTE user_defined_section
sleep 2
f1

源文件:包含原始函数定义

f1_orig()
{
echo "hello"
}

计时器文件:包含包括计时代码和调用原函数的封装函数

function f1
{
time1f1=`/home/albl/ksh_timer/ksh_timer_c`
ksh_timer_add_func f1
f1_orig $*
f1_orig_rc=$?
time2f1=`/home/albl/ksh_timer/ksh_timer_c`
let " time3f1 = $time2f1 - $time1f1"
print "$indent1:$indent2:$indent3:$indent4:$indent5:$time3f1" >&9
ksh_timer_remove_func f1
return $f1_orig_rc
}

exec 文件:包含用于任何用户定义部分的原始代码和计时器代码

. 

./ksh_timer.test_pres.413914.source
. ./ksh_timer.test_pres.413914.timer
time1user_defined_section=`/home/albl/ksh_timer/ksh_timer_c`
ksh_timer_add_func user_defined_section
sleep 1
f1
time2user_defined_section=`/home/albl/ksh_timer/ksh_timer_c`
let "time3user_defined_section=$time2user_defined_section-$time1user_defined_section"
print "$indent1:$indent2:$indent3:$indent4:$indent5:$time3user_defined_section" >&9
ksh_timer_remove_func user_defined_section
sleep 2
f1

运行该样例得到下列输出:

$ ./ksh_timer -s ./sample
----------------------Start of sample output--------------------------------
hello
hello
----------------------End of sample output--------------------------------
------------------------------------------------------------------------------------------
|    function   |     Minimum       |     Maximum       |   Average  |       Total       |
|               +-------------------+-------------------+------------+-------------------|
|   or Section  |iter.#|   time     |iter.#|   time     |   time     |#iter.|   time     |
|---------------+------+------------+------+------------+------------+------+------------|
|Main           |                                                           |0m03.092834s|
|---------------+------+------------+------+------------+------------+------+------------|
|-user_defined|     1|0m01.027853s|     1|0m01.027853s|0m01.027853s|     1|0m01.027853s|
|--f1           |     1|0m00.003143s|     1|0m00.003143s|0m00.003143s|     1|0m00.003143s|
|-f1            |     1|0m00.002652s|     1|0m00.002652s|0m00.002652s|     1|0m00.002652s|
|---------------------------------------------------------------------------+------------|
|-Unaccounted   |                                                           |0m02.062329s|
------------------------------------------------------------------------------------------

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索文件
, 函数
, 脚本
, 计时器
, time
, time函数
, ksh
, 时间
代码运行时间
timertask 注入接口、timerlistener 接口、定时器timer时间设置、c timer时间间隔、timer时间间隔,以便于您获取更多的相关知识。

时间: 2024-10-02 09:07:39

ksh_timer时间接口的相关文章

关于通过ruby互联网同步时间的几个思路

    我开始的思路是通过ruby的网络抓包能力,直接从时间同步网页抓取时间.但实际操作中发现很多时间网页都用的是js脚本计算的时间,直接抓成html文件,本地打开后会发现时间显示处都是空白.     比如网上朋友帮我分析的值: 那串数字是utc时间格式,是从1970年到现在的毫秒数,用ruby可以转换为人可读的格式: Time.at(1402230499914.5/1000) => 2014-06-08 20:28:19 +0800 还有朋友提供了另一种思路,就是使用标准互联网时间同步接口,比

Web Service 接口安全与解决方案

12.7.1. 接口安全问题 来源IP控制,即黑白名单,获取IP地址需要考虑X Forward for IP计数器,单位时间内IP访问次数达到阀值,就提示稍后连接 用户名密码认证 动态验证码 证书加密 md5/sha1 数字摘要 校验 SSL / TSL 证书加密 12.7.2. 访问接口协议 机遇http的实现方式有下面几种. http协议传统post/get 方式 soap 简单对象访问协议 xmlrpc 机遇xml的协议 json 近年来兴起的一种数据序列化传输方法 http无状态协议,不

15寸MacBook Pro 怎么样

  本周早些时候有消息称,苹果公司将会在星期三发布新款 15 英寸 Retina MacBook Pro ,一切来得太突然,就在5 月 19 日上午,苹果突然在其官方网站更新15 英寸 Retina MacBook Pro,让所有的果粉和媒体都意想不到,没有像12寸新MacBook那样盛大的发布会,一切悄无声息的,15 英寸 Retina MacBook Pro便与我们见面. 我们知道传统上MacBook Pro共有两条产品线:13寸MacBook Pro和13寸配备Retina MacBook

为什么选择这样的大数据平台架构?

当前BAT基本公开了其大数据平台架构,从网上也能查询到一些资料,关于大数据平台的各类技术介绍也不少,但在那个机制.那个环境.那个人才.那个薪酬体系下,对于传统企业,可借鉴的东西也是有限的. 技术最终为业务服务,没必要一定要追求先进性,各个企业应根据自己的实际情况去选择自己的技术路径. 与传统的更多从技术的角度来看待大数据平台架构的方式不同,笔者这次,更多的从业务的视角来谈谈关于大数据架构的理解,即更多的会问为什么要采用这个架构,到底能给业务带来多大价值,实践的最终结果是什么. 它不一定具有通用性

DataWorks数据埋点的设计及未来发展的思考

什么是前端埋点?         马总曾经说过现在是DT时代(大数据的时代).         数据已经成为一家公司最宝贵的财富,越来越多的互联网公司开始重视数据的应用.数据应用的过程是:数据收集 -> 数据整理(数据同步)-> 数据分析 -> 数据可视化.         前端埋点是用户行为数据采集领域非常重要的手段,指的是针对特定用户行为或事件进行捕获.处理和发送的相关技术及其实施过程.         当然前端埋点上报也不仅仅有用户行为数据的采集,还有一个很重要的领域--前端健康度

ARM微处理器的uC/OS的移植设计

概述 嵌入式操作系统μC/OS-II是一个公开源代码的占先式多任务的微内核RTOS,其特点可以概括为以下几个方面:公开源代码,代码结构清晰.明了,注释详尽,组织有条理,可移植性好,可裁剪,可固化.内核属于抢占式,最多可以管理60个任务.目前国内对μC/OS-II的研究和应用都很多.只要买一本书就可获得源代码,对学校和教育的使用完全免费,商业应用的费用相对也很低.所以对μC/OS-II实时操作系统的学习研究.开发.应用具有重要意义. 大部分的μC/OS-II代码是使用ANSI C语言书写的,因此μ

如何确认业务数据是否正常?

问题描述 现在我有某个接口是接供给外转调用的,每被外部调用一次我这边都会记录一笔调用记录以及这个接口耗时.接口成功与否,从这些数据中我可以得到这个接口每天.每小时.每分钟...的调用次数,以及一些平均响应时间,最大耗时,最小耗时等,现在想对这个接口进行一个监控,当出现接口被调用异常情况下就进行报警,目前我的做法是:1.每过10分钟就去统计一下,如果当天的调用次数超过了设置的峰值,则进行报警,可往往这些报警都是正常的,因为随着业务增长,接口被调用次数也会不断增长2.每隔一定时间就统计下接口的耗时情

我们需要什么样的ETL?

从10年前的数据仓库到当前的大数据平台,ETL也需要与时俱进,这里来谈谈个人的理解,如果你在考虑建设新的企业级ETL平台,可以作为参考: 一.定位的重新认识 ETL作为传统数据仓库的底层技术组件,主要是服务于数据采集的,因此,一般数据流动往往是单向的,但在新的时期,我们需要拓展其概念的内涵,从ETL升级到交换,以适应更多的应用场景,这是大数据平台规划人员特别需要考虑的. 但我们看到,在很多企业PaaS平台级的研发中,并未将交换其纳入产品的核心功能,为什么? ETL出来之时,的确适应了数据仓库建设

基于Bootstrap的Metronic框架实现页面链接收藏夹功能_javascript技巧

在一个系统里面,往往有很多菜单项目,每个菜单项对应一个页面,一般用户只需要用到一些常用的功能,如果每次都需要去各个层次的菜单里面去找对应的功能,那确实有点繁琐.特别是在菜单繁多,而客户又对系统整体不熟悉的情况下,如果有一个类似浏览器的收藏夹模块,把一些常用的菜单连接保存起来,每次从这个收藏夹主页去找对应的页面,那样确实是省事省力,非常方便.本篇随笔就是介绍在基于Metronic的Bootstrap开发框架里面实现这个收藏夹的思路. 1.系统的收藏夹界面处理效果 为了实现这个收藏夹功能,我们也需要