如何分析启动缓慢的Bash外壳脚本? [英] How can I profile a Bash shell script slow startup?

查看:15
本文介绍了如何分析启动缓慢的Bash外壳脚本?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的Bash shell最多需要3-4秒才能启动,而如果我用--norc启动它,它会立即运行。

我通过手动插入return语句并寻求速度提升来启动";分析";/etc/bash.bashrc~/.bashrc,但这不是一个量化过程,效率不高。

如何分析我的Bash脚本,并查看哪些命令执行时间最长?

推荐答案

如果您有GNUdate(或其他可以输出纳秒的版本),请在/etc/bash.bashrc的开头(或您希望在任何Bash脚本中开始跟踪的任何位置)执行此操作:

PS4='+ $(date "+%s.%N")11 '
exec 3>&2 2>/tmp/bashstart.$$.log
set -x

添加

set +x
exec 2>&3 3>&-

位于~/.bashrc的末尾(或您希望停止跟踪的任何Bash脚本的末尾)。11是八进制制表符。

您应该在/tmp/bashstart.PID.log中获得一个跟踪日志,该日志显示所执行的每个命令的秒。纳秒时间戳。每次与下一次的差异是介入步骤所用的时间量。

缩小范围时,可以向后移动set -x,向前移动set +x(或有选择地将几个感兴趣的部分括起来)。

虽然它没有GNUdate的纳秒那么细粒度,但Bash5包含一个以微秒为单位的变量。使用它可以使您不必为每行生成外部可执行文件,并且可以在没有GNUdate的Mac或其他地方运行-当然,前提是您有Bash 5。更改PS4

的设置
PS4='+ $EPOCHREALTIME11 '
正如@pawamoy所指出的,如果您使用的是Bash4.1或更高版本,则可以使用BASH_XTRACEFD将跟踪的输出发送到单独的文件描述符。发件人this answer

#!/bin/bash

exec 5> command.txt
BASH_XTRACEFD="5"

echo -n "hello "

set -x
echo -n world
set +x

echo "!"

这将导致跟踪输出转到文件command.txt,使stdoutstdout正常输出(或分别重定向)。

这篇关于如何分析启动缓慢的Bash外壳脚本?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆