gpt4 book ai didi

bash - 如何分析 Bash shell 脚本启动缓慢的情况?

转载 作者:行者123 更新时间:2023-11-29 08:38:37 25 4
gpt4 key购买 nike

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

我开始“剖析”/etc/bash.bashrc~/.bashrc,方法是手动插入 return 语句并寻求速度改进, 但它不是一个定量过程,效率不高。

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

最佳答案

如果您有 GNU date(或其他可以输出纳秒的版本),请在 /etc/bash.bashrc 的开头(或任何您想要的地方)执行此操作喜欢在任何 Bash 脚本中开始跟踪):

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

添加

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

~/.bashrc 的末尾(或在您希望停止跟踪的任何 Bash 脚本部分的末尾)。 \011 是一个八进制制表符。

您应该在 /tmp/bashstart.PID.log 中获得跟踪日志,其中显示了已执行的每个命令的秒数。纳秒时间戳。一次与下一次的差异是干预步骤所花费的时间。

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

虽然它不像 GNU date 的纳秒那样细粒度,但 Bash 5 包含一个以微秒为单位给出时间的变量。使用它可以避免为每一行生成外部可执行文件,并且可以在 Mac 或其他没有 GNU date 的地方工作——当然,只要你有 Bash 5。更改 PS4 的设置:

PS4='+ $EPOCHREALTIME\011 '

正如@pawamoy 所指出的,如果您有 Bash 4.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 - 如何分析 Bash shell 脚本启动缓慢的情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5014823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com