Parece que mi caparazón está tomando manera demasiado tiempo para arrancar. ¿Hay alguna forma de perfilarlo para que pueda descubrir qué es lo que está ralentizando tanto?¿Puedo hacer un perfil de mi .zshrc/.zshenv?
Respuesta
Trate de añadir esto al principio del archivo:
# 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
y esto al final:
# turn off tracing
unsetopt xtrace
# restore stderr to the value saved in FD 3
exec 2>&3 3>&-
y usted debe obtener un registro detallado que muestra el tiempo de la ejecución epoch_second.nanosecond de cada línea. Tenga en cuenta que se requiere que GNU date
(y soporte de sistema operativo) tenga una salida de nanosegundos.
Editar:
comentarios añadidos
Edición 2:
Si tiene zsh 4.3.12 o posterior, debe ser capaz de establecer PS4
como éste en lugar de utilizar el comando date
:
zmodload zsh/datetime
setopt promptsubst
PS4='+$EPOCHREALTIME %N:%i> '
que debe trabajar tanto en Linux y OS X para dar que nanosegundo precisión.
Usted puede comenzar su temporizador en el primer punto sospechosa en su ~/.zshrc
(o al principio):
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
Esto me avisa si alguna vez veo un inicio demasiado lento, y lo dejo en tan una envoltura permanente. Para obtener medidas más sofisticadas, existe un módulo zsh llamado zprof
. Es tan simple como envolver temporalmente el contenido de su ~/.zshrc
en un zmodload zsh/zprof
y zprof
. Esto eliminará algunas tablas de creación de perfiles que son lo suficientemente fáciles de interpretar.
Más información en zshmodules(1)
página de manual.
Cuando encuentro cosas que son particularmente lenta (init rbenv, vcs_info de salida para-cambios, antígeno, NVM,-mime-configuración zsh, intérprete de la versión de cheques, etc.) que añadir SLOW
comentarios como recordatorios, e intento para encontrar soluciones. Las startups lentas pueden causar mucho dolor, por lo que tiendo a evitar los paquetes/frameswords de zsh cuyo funcionamiento interno no creo. compinit es la cosa más lenta con la que estoy dispuesto a vivir y es ~ la mitad del tiempo total de inicio.
- 1. ¿Puedo hacer que un perfil de experto active otro?
- 2. ¿Cómo hacer un perfil del código JRuby?
- 3. Maven - ¿Puedo hacer referencia a la identificación de perfil en la definición de perfil?
- 4. ¿Puedo hacer que un perfil de Maven agregue webResources a una guerra y aún agregar webResources sin perfil?
- 5. ¿Cómo puedo hacer un perfil de arranque de una aplicación de Rails?
- 6. ¿Cómo puedo hacer que mi dispositivo vibre?
- 7. ¿Por qué no puedo activar un perfil de Maven2 desde otro perfil?
- 8. ¿Qué puedo hacer con mi documentación XML?
- 9. MPMoviePlayerController: ¿Cómo puedo hacer mi video loop?
- 10. ¿Cómo puedo usar un perfil de formateador Eclipse en VIm?
- 11. ¿Cómo puedo actualizar mi aplicación en App Store si el perfil de suministro de distribución expiró?
- 12. ¿Puedo eliminar un perfil de provisión de Provisioning Portal?
- 13. ¿Puedo hacer ingeniería inversa de mi propio dll?
- 14. ¿Cómo puedo hacer que mi objeto de física se calme?
- 15. ¿Continuará funcionando una aplicación si mi perfil de provisión expira?
- 16. ReSharper: ¿Puedo hacer mi propia acción de contexto?
- 17. ¿Puedo hacer público mi resultado de Google Analytics?
- 18. Estableciendo un perfil de aprovisionamiento desde dentro de xcodebuild al hacer aplicaciones de iPhone
- 19. ¿Cómo puedo hacer que mi comparer genérico (IComparer) maneje nulos?
- 20. ¿Cómo hacer un perfil de una unidad de prueba en Netbeans?
- 21. ¿Cómo puedo hacer una GUI para mi juego C# XNA?
- 22. ¿Cómo puedo hacer que mi aplicación .NET se borre sola?
- 23. Alternativas a ApacheBench para crear un perfil de la velocidad de mi código
- 24. ¿Cómo puedo hacer que enlace mi gran programa?
- 25. ¿Cómo puedo hacer que mi código sobreviva? (anti software rot)
- 26. ¿Cómo puedo hacer que mi aplicación sea secuenciable en C#?
- 27. ¿Cómo puedo hacer que mi mostrador parezca menos falso?
- 28. ¿Cómo puedo hacer que la gente pruebe mi marco?
- 29. ¿Cómo puedo hacer que mi colisión sea más sólida?
- 30. ¿Cómo puedo hacer Emacs auto-sangrando mi código C?
Agregué un espacio muy importante a lo que originalmente publiqué. –
Asegúrese de 'setopt prompt_subst' también; de lo contrario, la parte' $ (date ..) 'no será sustituida. – blueyed
¿Podría agregar algunas notas más sobre lo que cada línea anterior está haciendo exactamente? –