Es scheint, als ob meine Shell Weg zu lange dauert, um zu starten. Gibt es eine Möglichkeit, es zu profilieren, damit ich herausfinden kann, was es so langsam macht?Kann ich mein .zshrc/.zshenv profilieren?
Antwort
Versuchen Hinzufügen dieses am Anfang der Datei:
# 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
und dies am Ende:
# turn off tracing
unsetopt xtrace
# restore stderr to the value saved in FD 3
exec 2>&3 3>&-
Und Sie sollten ein detailliertes Logbuch zeigt den epoch_second.nanosecond Zeitpunkt der Ausführung erhalten jeder Zeile. Beachten Sie, dass GNU date
(und OS-Unterstützung) eine Nanosekunden-Ausgabe benötigt.
Edit:
hinzugefügt Kommentare
Edit 2:
Wenn Sie zsh 4.3.12 oder höher haben, sollten Sie in der Lage sein PS4
so zu setzen, anstatt den Befehl date
:
zmodload zsh/datetime
setopt promptsubst
PS4='+$EPOCHREALTIME %N:%i> '
die sowohl unter Linux als auch unter OS X arbeiten sollte, um Ihnen eine Genauigkeit im Nanosekundenbereich zu geben.
Sie können Ihre Timer beim ersten verdächtigen Punkt beginnen in Ihrem ~/.zshrc
(oder am Anfang):
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
Diese mich alarmiert, wenn ich jemals einen zu langsamen Start zu sehen, und ich lasse es in als ein permanenter Wrapper.
Für anspruchsvollere Messungen gibt es ein zsh Modul zprof
genannt. Es ist so einfach wie vorübergehend den Inhalt Ihrer ~/.zshrc
in zmodload zsh/zprof
und zprof
zu wickeln. Dadurch werden einige ausführliche Profiltabellen ausgegeben, die leicht zu interpretieren sind.
Weitere Informationen in zshmodules(1)
manpage.
Wenn ich Dinge, die besonders langsam sind (rbenv init, vcs_info Check-for-Änderungen, Antigen, NVM, zsh-mime-Setup, Dolmetscher Versionsprüfung, usw.) Ich füge SLOW
Kommentare als Erinnerungen, und versuchen, Workarounds finden. Langsame Startups können eine Menge Kummer verursachen, daher tendiere ich dazu, zsh Pakete/Framewords zu vermeiden, deren innere Arbeitsweise ich nicht kenne. Compinit ist die langsamste Sache, mit der ich leben will und ist ~ die Hälfte der gesamten Startzeit.
- 1. Kann ich Lua-Skripte in Redis profilieren?
- 2. Wie kann ich Perl Regexes profilieren?
- 3. Wie kann ich ein Multithread-Programm profilieren?
- 4. Wie kann ich eine Kivy-Anwendung profilieren?
- 5. Worum geht es bei der Profilerstellung und wie kann ich mein Java-Programm profilieren?
- 6. Graphics Profilieren
- 7. Wie kann ich die Speicherbelegung in meinem Projekt profilieren?
- 8. Wie kann ich einen vollständigen C++ Build profilieren?
- 9. Kann libcrypto Methoden mit gprof nicht profilieren
- 10. Wie kann ich eine Anfrage in Ruby on Rails profilieren?
- 11. Wie kann ich die Template-Leistung in Template :: Toolkit profilieren?
- 12. Kann ich die CPU-Auslastung auf Unterfunktionsebene in Chrome profilieren?
- 13. Wie kann ich ein Multithread-Programm in Python profilieren?
- 14. Wie kann man TensorFlow-Netzwerke profilieren?
- 15. Profilieren Hilfe erforderlich
- 16. Profilieren eingebettete Anwendung
- 17. Software Profilieren Werkzeuge
- 18. Wie kann ich mein Formular für mein Formular anzeigen lassen?
- 19. Profilieren Python Scripts auf mod_wsgi
- 20. Profilieren nur benutzerdefinierte Funktionen pstats
- 21. Wie profilieren, wenn in C++
- 22. Ich brauche Hilfe, um meinen Code zu profilieren
- 23. Wie benutze ich MacOS Shark, um meine Anwendung zu profilieren?
- 24. Wie kann ich mein Panel komplett reinigen
- 25. kann ich mein Google Analytics-Ergebnis veröffentlichen?
- 26. Wie kann ich mein Datenbankdesign zeichnen?
- 27. Wie kann ich mein Kakaorahmenwerk archivieren
- 28. Warum kann ich mein Navigationsmenü nicht zentrieren?
- 29. Wie kann ich mein neues Projekt analysieren?
- 30. Ich kann mein Paket nicht installieren
Ich habe einen sehr wichtigen Platz zu dem hinzugefügt, was ich ursprünglich gepostet habe. –
Stellen Sie sicher, dass Sie "setopt prompt_subst" auch setzen - sonst wird der '$ (date ..)' Teil nicht ersetzt. – blueyed
Könntest du bitte noch ein paar Anmerkungen darüber machen, was jede Zeile genau macht? –