加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

shell脚本的性能分析工具

发布时间:2020-12-15 19:46:55 所属栏目:安全 来源:网络整理
导读:我试图加快一些脚本的调用子shell并做各种各样的事情。我想知道是否有任何可用的工具来执行shell脚本及其嵌套的shell,并报告脚本的哪些部分是最昂贵的。 例如,如果我有一个如下所示的脚本。 #!/bin/bashecho "hello"echo $(date)echo "goodbye" 我想知道三
我试图加快一些脚本的调用子shell并做各种各样的事情。我想知道是否有任何可用的工具来执行shell脚本及其嵌套的shell,并报告脚本的哪些部分是最昂贵的。

例如,如果我有一个如下所示的脚本。

#!/bin/bash

echo "hello"
echo $(date)
echo "goodbye"

我想知道三条线的长短。时间只会给我全部时间的脚本。 bash -x是有趣的,但不包括时间戳或其他时间信息。

您可以设置PS4显示时间和行号。这样做不需要安装任何实用程序和工作,而不将stderr重定向到stdout。

对于这个脚本:

#!/bin/bash -x
# Note the -x flag above,it is required for this to work
PS4='$(date "+%s.%N ($LINENO) + ")'
for i in {0..2}
do
    echo $i
done
sleep 1
echo done

输出如下:

+ PS4='$(date "+%s.%N ($LINENO) + ")'
1291311776.108610290 (3) + for i in '{0..2}'
1291311776.120680354 (5) + echo 0
0
1291311776.133917546 (3) + for i in '{0..2}'
1291311776.146386339 (5) + echo 1
1
1291311776.158646585 (3) + for i in '{0..2}'
1291311776.171003138 (5) + echo 2
2
1291311776.183450114 (7) + sleep 1
1291311777.203053652 (8) + echo done
done

这假设是GNU date,但是您可以将输出规范更改为您喜欢的任何内容或与您使用的日期版本相匹配的任何内容。

注意:如果您有一个现有的脚本,要进行此操作而不进行修改,则可以执行以下操作:

PS4='$(date "+%s.%N ($LINENO) + ")' bash -x scriptname

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读