On dirait que ma coquille prend chemin trop long à démarrer. Y a-t-il un moyen de le profiler pour savoir ce qui le ralentit autant ?
J'ai ajouté un espace très important à ce que j'ai posté initialement.
On dirait que ma coquille prend chemin trop long à démarrer. Y a-t-il un moyen de le profiler pour savoir ce qui le ralentit autant ?
Essayez d'ajouter ceci au début du fichier :
# set the trace prompt to include seconds, nanoseconds, script name and line number
# This is GNU date syntax; by default Macs ship with the BSD date program, which isn't compatible
PS4='+$(date "+%s:%N") %N:%i> '
# save file stderr to file descriptor 3 and redirect stderr (including trace
# output) to a file with the script's PID as an extension
exec 3>&2 2>/tmp/startlog.$$
# set options to turn on tracing and expansion of commands contained in the prompt
setopt xtrace prompt_subst
et ceci à la fin :
# turn off tracing
unsetopt xtrace
# restore stderr to the value saved in FD 3
exec 2>&3 3>&-
Vous devriez obtenir un journal détaillé indiquant l'heure d'exécution de chaque ligne (epoch_second.nanosecond). Notez que GNU date
(et le support du système d'exploitation) est nécessaire pour avoir une sortie nanoseconde.
Editar:
commentaires ajoutés
Edit 2 :
Si vous disposez de zsh 4.3.12 ou d'une version plus récente, vous devriez être en mesure de configurer PS4
comme ceci au lieu d'utiliser le date
commandement :
zmodload zsh/datetime
setopt promptsubst
PS4='+$EPOCHREALTIME %N:%i> '
qui devrait fonctionner à la fois sur Linux et OS X pour vous donner une précision à la nanoseconde.
Pourriez-vous ajouter quelques notes supplémentaires sur ce que chaque ligne ci-dessus fait exactement ?
Vous pouvez commencer votre minuterie au premier point suspect de votre ~/.zshrc
(ou au début) :
integer t0=$(date '+%s') # move this around
... maybe something suspect ...
# End of zshrc
function {
local -i t1 startup
t1=$(date '+%s')
startup=$(( t1 - t0 ))
[[ $startup -gt 1 ]] && print "Hmm, poor shell startup time: $startup"
}
unset t0
Cela m'alerte si jamais je vois un démarrage trop lent, et je le laisse comme un emballage permanent.
Pour des mesures plus sophistiquées, il existe un module zsh appelé zprof
. C'est aussi simple que d'envelopper temporairement le contenu de vos ~/.zshrc
dans un zmodload zsh/zprof
y zprof
. Cela va générer des tableaux de profilage verbeux qui sont assez faciles à interpréter.
Plus d'informations dans zshmodules(1)
page de manuel.
Lorsque je trouve des choses qui sont particulièrement lentes (rbenv init, vcs_info check-for-changes, antigen, nvm, zsh-mime-setup, vérification de la version de l'interpréteur, etc) je ajouter SLOW
des commentaires comme rappels et essayer de trouver des solutions de contournement. Les démarrages lents peuvent causer beaucoup d'ennuis, donc j'ai tendance à éviter les paquets/mots-clés zsh dont je ne connais pas le fonctionnement interne. compinit est la chose la plus lente avec laquelle je suis prêt à vivre et représente environ la moitié du temps total de démarrage.
Zsh possède un module de profilage. Au début de ~/.zshrc
o ~/.zshenv
ajoutez-le comme ça :
# Uncomment to use the profiling module
# zmodload zsh/zprof
Décommentez-le, démarrez un nouveau shell interactif puis exécutez la commande zprof
. Vous obtiendrez une liste détaillée d'éléments que vous pourrez passer en revue pour mieux comprendre où se trouvent les goulets d'étranglement de vos performances :
num calls time self name
-----------------------------------------------------------------------------------
1) 1 7.29 7.29 19.60% 7.29 7.29 19.60% _p9k_init_ssh
2) 2 6.72 3.36 18.06% 6.63 3.31 17.81% gitstatus_start_impl
3) 1 4.00 4.00 10.75% 4.00 4.00 10.75% _p9k_must_init
4) 3 19.28 6.43 51.80% 3.82 1.27 10.28% (anon)
5) 1 1.63 1.63 4.37% 1.63 1.63 4.37% _p9k_restore_state_impl
6) 1 16.92 16.92 45.46% 1.61 1.61 4.32% _p9k_precmd_impl
7) 1 7.13 7.13 19.16% 0.87 0.87 2.33% _p9k_set_prompt
8) 22 6.26 0.28 16.83% 0.84 0.04 2.27% _p9k_build_segment
9) 17 0.82 0.05 2.19% 0.82 0.05 2.19% _p9k_param
10) 6 2.24 0.37 6.02% 0.74 0.12 1.98% _p9k_left_prompt_segment
11) 5 0.59 0.12 1.60% 0.59 0.12 1.60% add-zsh-hook
12) 1 3.05 3.05 8.20% 0.58 0.58 1.56% prompt_dir
Et voici une phrase tirée de Accélération de zsh vous apprécierez si l'heure de départ est sporadique :
for i in $(seq 1 10); do /usr/bin/time zsh -i -c exit; done
Exécutez ce travail et vous devriez voir un résultat comme :
0.05 real 0.02 user 0.02 sys
0.05 real 0.02 user 0.02 sys
0.05 real 0.02 user 0.02 sys
0.05 real 0.02 user 0.02 sys
0.05 real 0.02 user 0.02 sys
0.05 real 0.02 user 0.02 sys
0.05 real 0.02 user 0.02 sys
0.05 real 0.02 user 0.02 sys
0.05 real 0.02 user 0.02 sys
0.05 real 0.02 user 0.02 sys
Profit.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.