Wie kann ich den Terminalstart in Lion beschleunigen?
Ich beziehe mich nicht auf den Start der Terminal-Anwendung, sondern auf die Start-Terminal-Fenster, wie wenn ich eine neue Registerkarte öffne.
Ich habe nichts in meiner .bash_profile- Datei und starterm -rf /private/var/log/asl/*.asl
alle 4 Stunden (wodurch die Dateien gelöscht werden, die normalerweise das Terminal verlangsamen).
Wenn ich gerade einen neuen Tab öffne, dauert es 3-4 Sekunden, bis ich etwas ausführen kann.
macos
terminal
command-line
Fernando
quelle
quelle
.bash_profile
(siehe~/.profile
übrigens auch). Beachten Sie auch, dass Sie mit der Eingabe beginnen können, während die Bash geladen wird. In der Regel wird das, was Sie eingeben, in die Eingabeaufforderung kopiert, sobald es fertig ist.Antworten:
Kurze Antwort:
Das Problem wird durch eine (möglicherweise) teure ASL-Systemprotokollsuche verursacht. Um dies in Aktion zu sehen, führen Sie es
sudo fs_usage | grep 'asl.*login'
in einem Terminalfenster aus und öffnen Sie dann ein neues Terminalfenster.Um das Problem zu lösen, konfigurieren Sie Terminal so, dass eine nicht standardmäßige Shell gestartet wird:
sudo ln -s /bin/bash /usr/local/bin/bash
Hinweis 1: Möglicherweise müssen Sie auch
bash
und-bash
zur Prozessliste unter "Terminaleinstellungen> Profile> Shell> Vor dem Schließen fragen" hinzufügen .Hinweis 2:
/usr/local/bin
Kann im rootlosen Modus von OS X 10.11 (El Capitan) beschrieben werden.So überprüfen Sie den Fix:
login -pfq username /usr/bin/bash
oder lautenlogin -pfql username ...
Wichtig: Wenn der Anmeldebefehl den
-q
Parameter nicht enthält , haben Sie das Problem nicht behoben.Sie können auch
sudo fs_usage | grep 'asl.*login'
überprüfen, ob/var/log/asl
beim Öffnen eines neuen Terminalfensters nicht darauf zugegriffen wird.Einzelheiten:
Hier spielen sich eine Reihe von Fehlern ab.
Die eigentliche Ursache für die Langsamkeit ist
/usr/bin/login
, dass standardmäßig das Datum Ihrer letzten Anmeldung angezeigt wird. Um dieses letzte Anmeldedatum zu erhalten, durchsucht es die ASL-Datenbank (Apple System Log) unter/var/log/asl/
. Diese Protokolldateien können sehr stark fragmentiert sein und es ist diese Dateifragmentierung, die die Verzögerung beim Öffnen eines neuen Fensters oder einer neuen Registerkarte verursacht. (Bug 1)Die einzige Möglichkeit, die ASL-Suche nach der letzten Anmeldung zu unterdrücken, besteht darin, den
-q
Parameter an zu übergeben/usr/bin/login
. Die.hushlogin
Datei unterdrückt auch die Anzeige "Last Login", nicht jedoch die teure ASL-Suche. (Bug 2)Terminal wird immer
/usr/bin/login
zum Starten jedes neuen Fensters / jeder neuen Shell verwendet. Es gibt keine Möglichkeit, eine Shell direkt zu starten, und es gibt keine Möglichkeit, die an/usr/bin/login
(Bug 3) übergebenen Parameter direkt zu steuern .Wie sich herausstellt, übergibt Terminal den
-q
Parameter an,/usr/bin/login
wenn es für die Verwendung einer nicht standardmäßigen Shell konfiguriert ist . (Bug 4)Der
-q
Parameter ist das, was wir brauchen, um das Problem zu vermeiden, daher der Symlink zu/usr/local/bin/bash
.quelle
/bin/bash
verhält er sich so, als ob die Standardanmeldeshell ausgewählt wurde. Jeder andere Befehl als/bin/bash
funktioniert ordnungsgemäß. Daher ist die Verwendung von / usr / bin / bash nur eine Problemumgehung. Dieser Fehler ist in Snow Leopard nicht vorhanden.Ich musste von der Anmeldeshell zum Befehl
/bin/bash -il
in iTerms Einstellungen> Profile> Allgemein> Befehl wechseln .Ich musste die Option
-l
( Bash so machen, als ob sie als Anmeldeshell aufgerufen worden wäre ) hinzufügen, um Umgebungsvariablen von zu setzen~/.bash_profile
quelle
.hushlogin
Erstellen Sie eine leere Datei in Ihrem Home-Ordner mit dem Namen
.hushlogin
; Dadurch wird die Zeit, die zum Anzeigen einer Registerkarte "Terminal.app" benötigt wird, erheblich verkürzt.Sie können die
.hushlogin
Datei in Terminal.app mit dem folgenden Befehl erstellen :Die Datei wird sofort wirksam.
Weitere Informationen zur
.hushlogin
Datei und zum Anmeldevorgang im Allgemeinen finden Sie im Anmeldehandbuch .Anmeldevorgang beruhigen
Wenn Sie eine neue Registerkarte "Terminal" erstellen, führen Sie den Anmeldevorgang durch. Der Vorgang umfasst das Abrufen verschiedener Informationen zu Ihrer vorherigen Anmeldesitzung, der Nachricht des Tages und das Anzeigen von Systemnachrichten. Dies kann zu erheblichen Verzögerungen führen. Versuchen Sie, diese Meldungen auszublenden, um festzustellen, ob die Verzögerung verschwindet.
quelle
opensnoop
. Siehe meine Antwort unten.OK, ich habe eine ähnliche Schlussfolgerung wie Darren, obwohl sich der Profilierungsmechanismus geringfügig unterscheidet (Hinweis: Die langsame Anmeldung kann in Yosemite weiterhin auftreten).
Hier sehen Sie anhand des OS X- Beispielprofilerbefehls , was tatsächlich ausgeführt wird, wenn Sie ein neues Anmeldefenster starten .
Finden Sie heraus, welchen Befehl ein normaler Login ausführt
Du wirst so etwas sehen
login -pfl username /bin/bash -c exec -la bash /bin/bash
Erstellen Sie einen Skriptdateinamen
profile_login.sh
mit den folgenden Inhalten, indem Sie a hinzufügen-c ""
bis zum Ende des erkannten Befehls, um die sofortige Rückgabe der Bash mit folgendem Inhalt anzufordern:
Mach es ausführbar
$ chmod u+x profile_login.sh
und starte es mit sudo (
sample
Befehl benötigt es)$ sudo ./profile_login.sh
OK, mach weiter und führe es aus. Zum Beispiel, indem Sie zuerst den
purge
Befehl ausführen . Auf meiner Box habe ich eine große Ausgabekurve. Auf der Suche nach den "am größten nummerierten Zweigen" (normalerweise oben) sah ich die folgenden zwei größten Täter :Eine von etwas namens,
pam_start
die pam auth lib images zu öffnen scheintund das wird manchmal von einem anderen Täter gefolgt
getlastlogxbyname
Grundsätzlich gibt es also zwei Täter. Eines ist
pam
(irgendeine Art von Authentifizierungssystem) und das andere ist dasasl
"Erkennen Ihrer neuesten Anmeldedaten". Es reicht also anscheinend nicht aus, nur Ihre/private/var/log/asl/*.asl
Dateien zu löschen . Das Laden von PAM ist auf meinem Rechner ohnehin viel teurer [SSD]. Fühlen Sie sich frei, das obige Skript auszuführen und zu prüfen, ob Ihr System identisch ist. Interessanterweise scheint der Quellcode für diese Methodenaufrufe auch online verfügbar zu sein, zum Beispiel openpam_dynamicWenn ich der Antwort von Darren folge und meine "geöffneten Muscheln" durch etwas anderes als "/ bin / bash" ersetze, werden die folgenden Zeilen angezeigt, die zum Starten neuer Terminal-Registerkarten verwendet werden:
Also, wenn ich jetzt den gleichen
sample
Trick auf den neuen Login-Befehl verwendees wird ein viel kleinerer Stacktrace generiert, der größte Übeltäter ist:
Ich denke, das liegt daran, dass der Login "-q" -Parameter jetzt verwendet wird. Anscheinend überspringt dieser Parameter sowohl das Laden der Pam-Module als auch das Nachschlagen der letzten Anmeldezeit (beide Täter). Laut den Dokumenten des
login
Befehls sollte das Berühren der~/.hushlogin
Datei dasselbe tun, aber anscheinend funktioniert dies nicht mehr [zumindest bei mir mit 10.10].Zusammenfassend ist es also nicht ausreichend, /private/var/log/asl/*.asl zu entfernen (in meinem Experiment war dies nur für höchstens 1/3 der tatsächlichen Verlangsamung verantwortlich, wenn Sie dort mehr Dateien hätten, könnte dies jedoch eine Rolle spielen für einen größeren Prozentsatz bin ich mir sicher).
Wenn Sie ähnliche Skripte verwenden, sollten Sie in der Lage sein, zu ermitteln, warum Ihr lokaler Computer zum Stillstand gekommen ist, und zu prüfen, ob die oben genannte Korrektur auf Sie zutrifft. Fühlen Sie sich frei, hier zu kommentieren.
UPDATE: Es scheint, dass
coresymbolication_load_image
dies auch beimlogin -pfql
Aufrufen eine Menge Zeit in Anspruch nehmen kann (vermutlich muss sich ein Pam-Authentifizierungsmodul oder ein anderes Modul bei einem zentralen Anmeldeserver "auswählen" oder ein anderes, also muss es auf die Antwort eines Dritten warten ). Die einzige echte Problemumgehung, die ich gefunden habe, besteht darin, iTerm2 zu verwenden und stattdessen die Einstellungen -> Profile -> Allgemein -> Befehl auf zu ändern/bin/bash
.quelle
Es geht darum, die Ursache zu untersuchen. Sie können sehen, was getan wird, während der Prozess beginnt, indem Sie eingeben,
bash -x
wodurch der Prozess zum Starten der Shell ausgedruckt wird.Persönlich bemerke ich nur die Verzögerung zwischen der Aktivierung und Deaktivierung der App und in der ersten Registerkarte, die nach einer gewissen Zeit der Aktivität erstellt wurde. Ich denke immer, dass es um das Verschieben von Speicherseiten geht.
quelle
Reduzieren Sie Ihren Verlauf auf 4 bis 10 000 Zeilen und versuchen Sie möglicherweise, alle gespeicherten Fenster zu schließen und zu verwerfen. Ich habe gesehen, dass beide auf langsameren Maschinen einen Unterschied machen - insbesondere auf solchen ohne SSD als Speicher.
quelle
In meinem Fall stellte ich fest, dass der Schuldige Active Directory war , nachdem ich das oben Genannte auf meiner Arbeitsmaschine erfolglos ausprobiert hatte . Das Update bestand darin, das Verzeichnisdienstprogramm aufzurufen und die AD-Diensteinstellungen zu bearbeiten (doppelklicken Sie auf "Active Directory"), um "Mobiles Konto bei Anmeldung erstellen" zu aktivieren:
Dies führt anscheinend dazu, dass die AD-Anmeldeinformationen lokal zwischengespeichert werden, sodass das System nicht mehr bei jedem Versuch, Ihr Kennwort zu validieren, zum Server wechseln muss.
Sie können das Verzeichnisdienstprogramm mit Spotlight oder über den Abschnitt "Anmeldeoptionen" in den Systemeinstellungen / Benutzer und Gruppen aufrufen (klicken Sie auf die Schaltfläche "Bearbeiten ..." neben "Netzwerkkontoserver"):
quelle
Renn einfach:
in separaten Terminals und öffnen Sie das neue Open, um zu sehen, was während dieser Zeit ausgeführt wird.
Wenn nichts offensichtlich ist, versuchen Sie Folgendes:
Dadurch werden alle Ihre Details gedruckt, die beim Laden der Registerkarte auftreten.
quelle
Öffne
/etc/profile
und füge die ZeilePATH=""
so hinzu, dass sie so aussieht:quelle
Das Problem für mich war, dass der Active Directory-Domänenserver ungültig war.
Das Ändern und Neustarten des Macs hat das Problem behoben.
quelle