Zsh Shell занимает ненормально много времени при первом запуске - PullRequest
2 голосов
/ 21 июня 2020

Сейчас я использую ubuntu 20 и zsh + oh my zsh shell. Проблема в том, что zsh оболочка запускается ненормально долго. Для сравнения: он почти в 9 раз медленнее, чем raw bash по сравнению с использованием команды time

Time Check с использованием Raw bash

for i in $(seq 1 10); do /usr/bin/time bash -i -c exit; done
exit
0.02user 0.07system 0:00.19elapsed 45%CPU (0avgtext+0avgdata 1816maxresident)k
136inputs+0outputs (3major+1737minor)pagefaults 0swaps
exit
0.05user 0.04system 0:00.17elapsed 52%CPU (0avgtext+0avgdata 1820maxresident)k
0inputs+0outputs (0major+1737minor)pagefaults 0swaps
exit
0.02user 0.06system 0:00.18elapsed 42%CPU (0avgtext+0avgdata 1824maxresident)k
0inputs+0outputs (0major+1745minor)pagefaults 0swaps
exit
0.08user 0.03system 0:00.21elapsed 51%CPU (0avgtext+0avgdata 1828maxresident)k
0inputs+0outputs (0major+1743minor)pagefaults 0swaps
exit
0.00user 0.06system 0:00.14elapsed 40%CPU (0avgtext+0avgdata 1816maxresident)k
0inputs+0outputs (0major+1736minor)pagefaults 0swaps
exit
0.02user 0.05system 0:00.14elapsed 50%CPU (0avgtext+0avgdata 1820maxresident)k
0inputs+0outputs (0major+1738minor)pagefaults 0swaps
exit
0.00user 0.06system 0:00.13elapsed 46%CPU (0avgtext+0avgdata 1820maxresident)k
0inputs+0outputs (0major+1741minor)pagefaults 0swaps
exit
0.01user 0.05system 0:00.14elapsed 40%CPU (0avgtext+0avgdata 1816maxresident)k
0inputs+0outputs (0major+1738minor)pagefaults 0swaps
exit
0.00user 0.07system 0:00.14elapsed 48%CPU (0avgtext+0avgdata 1816maxresident)k
0inputs+0outputs (0major+1738minor)pagefaults 0swaps
exit
0.01user 0.06system 0:00.13elapsed 50%CPU (0avgtext+0avgdata 1816maxresident)k
0inputs+0outputs (0major+1737minor)pagefaults 0swaps

Time Check с использованием zsh + о, мой zsh

for i in $(seq 1 10); do /usr/bin/time zsh -i -c exit; done
0.67user 0.82system 0:02.54elapsed 58%CPU (0avgtext+0avgdata 4676maxresident)k
0inputs+0outputs (0major+8337minor)pagefaults 0swaps
0.66user 1.01system 0:02.88elapsed 57%CPU (0avgtext+0avgdata 4676maxresident)k
0inputs+0outputs (0major+8329minor)pagefaults 0swaps
0.51user 1.11system 0:03.17elapsed 50%CPU (0avgtext+0avgdata 4676maxresident)k
0inputs+0outputs (0major+8345minor)pagefaults 0swaps
0.74user 0.76system 0:02.78elapsed 53%CPU (0avgtext+0avgdata 4676maxresident)k
0inputs+0outputs (0major+8339minor)pagefaults 0swaps
0.59user 0.99system 0:02.74elapsed 57%CPU (0avgtext+0avgdata 4676maxresident)k
0inputs+0outputs (0major+8326minor)pagefaults 0swaps
0.80user 0.86system 0:02.88elapsed 57%CPU (0avgtext+0avgdata 4676maxresident)k
0inputs+0outputs (0major+8339minor)pagefaults 0swaps
0.63user 1.02system 0:02.78elapsed 59%CPU (0avgtext+0avgdata 4676maxresident)k
0inputs+0outputs (0major+8330minor)pagefaults 0swaps
0.87user 0.89system 0:03.08elapsed 57%CPU (0avgtext+0avgdata 4676maxresident)k
0inputs+0outputs (0major+8325minor)pagefaults 0swaps
0.68user 0.98system 0:02.89elapsed 57%CPU (0avgtext+0avgdata 4676maxresident)k
0inputs+0outputs (0major+8323minor)pagefaults 0swaps
0.71user 0.88system 0:02.81elapsed 56%CPU (0avgtext+0avgdata 4676maxresident)k
0inputs+0outputs (0major+8338minor)pagefaults 0swaps

Я хотел бы снова очистить его, что задержка в zsh происходит только при открытии терминала при запуске, а не во время обычного использования. Я отключил все плагины и использую тему powerlevel10k, хотя могу определенно сказать, что это не имеет ничего общего с темой. Я заметил это замедление сразу после того, как я перешел на оболочку zsh, которая даже ухудшилась после того, как я установил свою zsh. Я также сказал некоторым из моих друзей провести этот тест, и их тайминги zsh были очень немного выше, чем сырые bash, это приемлемо, но мой кажется совершенно ненормальным.

Общие рекомендации также приветствуются, но, в частности, я хотел бы спросить, могу ли я проверить, что именно делает терминал в фоновом режиме, пока он принимает около 3 секунд для запуска в zsh вместо 0,2 секунды в bash

Вот мой .zshr c файл, если это помогает

Изменить - Я пробовал провести тот же тест с Raw zsh (без oh my zsh) Результаты интересны, теперь оболочка zsh запускается примерно в 4 раза медленнее, в среднем около 1,2 секунды, в отличие от до 3 секунд с помощью zsh + oh my zsh

Ответы [ 2 ]

2 голосов
/ 22 июня 2020

Вы можете проверить, какие функции занимают больше всего времени при запуске zsh, поместив zmodload zsh/zprof вверху вашего zshr c и zprof внизу. У вас будет хорошая разбивка в следующий раз, когда вы откроете новый сеанс.

Надеюсь, это поможет вам разобраться в том, что долго загружается.

Честно говоря, ох-боже, zsh это немного мешанина и не оптимизирует загрузку функций, а просто все источники - если один из этих источников запускает программу, вашей оболочке придется ждать, пока она не запустится, пока не загрузится приглашение.

I вручную закодировал свою конфигурацию zsh и использовал Zinit https://github.com/zdharma/zinit для загрузки плагинов. Моя оболочка запускается за миллисекунды.

1 голос
/ 22 июня 2020

Если вам нужно быстро получить пригодную для использования оболочку при запуске Zsh, вот что вы можете сделать:

  1. Введите p10k configure. Эта команда поступает из Powerlevel10k, который вы уже используете.
  2. Когда мастер спросит, следует ли включить Instant Prompt , выберите Quiet или Verbose но не Выкл. .

Теперь для всех практических целей Zsh запускается мгновенно. Вы можете включить столько плагинов, сколько захотите, и все будет мгновенно. Вы можете найти подробности здесь и здесь .

Обратите внимание, что вы все равно получите тот же результат от time /usr/bin/time zsh -i -c exit. Этот тест не измеряет время запуска Zsh. Он не дает ни нижней, ни верхней границы времени запуска Zsh. Его результаты могут быть произвольно выше или ниже реального времени запуска Zsh.

...