macOS 系统中 iterm2 终端启动慢的原因排查方法

本文发布于:2024-11-22,最后更新于:2025-02-22,如果内容失效请留言告知。
目录
[隐藏]

不知道从什么时候开始,macbook 里打开 iterm2 的初始化启动时间变得非常慢。由于通过 brew 安装一个软件时会自动执行 brew update,初始估计是某个应用被更新后新的版本导致的,但是无法确定具体导致该问题的原因在哪儿。

1 通过启用 zsh/zprof 模块分析 shell 启动耗时详情

从 macOS Catalina 版开始,系统使用的默认 shell 是 zsh。zsh 有一个性能监控模块 zsh/zprof,启用了它后,可以输出 shell 启动过程中所有函数的调用时间。

编辑 ~/.zshrc 文件,在最前面加上:

1
zmodload zsh/zprof

在该文件的末尾加上:

1
zprof

然后新开一个 shell 终端,则会在启动完成后打印出类似如下信息:

1
2
3
4
5
6
Last login: Sat Feb 22 10:07:47 on ttys005
You have new mail.
num  calls                time                       self            name
-----------------------------------------------------------------------------------
 1)    1        1252.28   752.28   59.80%    376.78   376.78   29.95%  nvm_auto
 2)    2         875.49   187.75   29.85%    228.86   114.43   18.19%  nvm

如此就可以知道问题出在哪里了,然后在 ~/.zshrc~/.bash_profile 等文件中查找相关关键词并针对性优化处理即可。在问题解决后,可以注释上述修改,以避免每次启动终端都会打印这类信息。

2 解决案例参考:使用 fnm 替换 nvm

我这里可以很明显看到,是因为 nvm 初始化执行的时间过久。我选择的方法是使用 fnm 替换 nvm。

首先是移除 nvm。编辑 ~/.bash_profile 文件,找到安装配置 nvm 时添加的如下内容并移除:

1
2
3
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

接着执行如下命令直接删除 ~/.nvm 目录即可:

1
/bin/rm -rf ~/.nvm

如果是通过 homebrew 安装的 nvm,可以执行如下命令删除:

1
brew uninstall nvm

最后使用 brew 安装 fnm。执行如下安装命令:

1
brew install fnm

编辑 ~/.bash_profile 文件,在末尾添加如下内容:

1
eval "$(fnm env --multi)"

让配置在当前终端立即生效:

1
2
3
4
5
6
7
8
source ~/.bashrc
 
# 查看远端 Node.js 版本
fnm ls-remote
# 选择一个最新的稳定版本安装
fnm install v22.14.0
# 验证 node 版本
node -v

3 扩展参考

点赞 (0)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code