LoginSignup
8
10

More than 5 years have passed since last update.

fish shellの起動時間が遅いのでプロファイルを取得する

Last updated at Posted at 2018-04-05

概要

fish shellの起動がだんだん遅くなってきたので、設定ファイルの棚卸しも兼ねて起動時のプロファイルを取得して遅い部分を調査しました。

プロファイルの取得

一般にfish shellでプロファイルを取得するには、fishの起動時に--profile /path/to/file.txtというオプションを指定します。

$ fish --profile profile.txt

これで新しくfish shellが立ち上がり、シェルを終了するまでの実行されたコマンドとその処理時間が詳細に記録されます。

例えば、lsを実行すると以下のような結果が出てきます。なお、ここに示している出力以外にも大量にコマンドが前後に出てきますが、ここでは割愛しています。

Time    Sum     Command
[...]
436     31113   > ls
401     14172   -> source /usr/local/Cellar/fish/2.7.1/share/fish/functions/ls.fish
36      13771   --> if command ls --version >/dev/null ^/dev/null...
5557    5557    ---> command ls --version >/dev/null ^/dev/null
8149    8149    ---> command ls -G / >/dev/null ^/dev/null
29      29      ---> function ls --description "List contents of directory"...
16505   16505   -> command ls -G $argv
[...]

1カラム目のTimeが各行のコマンド単体の実行にかかった時間、2カラム目のSumがコマンド全体としてかかった時間、そして3カラム目が実行されたコマンドを示しています。時間の単位はどちらもマイクロ秒です。

lsが実行されるとまずls.fishというコマンドが読み込まれ、この処理自体は14.172msかかっていることがわかります。コマンドの中身を見ると"Make ls use colors if we are on a system that supports that feature and writing to stdout."とあるので、lsのファイル名などに色を付ける関係の処理を行っているようです。

起動時プロファイルを取得する

今回は起動時間が遅いということで、シェルの立ち上げ時のプロファイルを取得します。--profileをつけてシェルを起動してすぐに終了させることで起動部分のみのプロファイルを取得します。そして2カラム目のトータル実行時間でソートすることで、コマンドの処理時間順に並び替えています。

$ fish --profile profile.txt
$ exit
$ sort -k 2 -nr profile.txt

これでボトルネックとなっている箇所が特定できます。私の場合はfishermanで入れた特定のパッケージの設定が遅いことがわかったので、それを.config/fish/config.fish上で無効にすることにより、起動時間を短縮することができました。

参考

8
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
10