OK, j'ai une conclusion similaire à celle de Darren, bien que le mécanisme de profilage soit légèrement différent (NB : la connexion lente peut toujours se produire dans Yosemite).
Voici un moyen de savoir ce que est en cours d'exécution lorsque vous démarrez une nouvelle fenêtre de connexion, en utilisant la fonction OS X échantillon commande de profilage.
Découvrez quelle commande exécute un login normal
$ ps -ef | grep login
Vous verrez quelque chose comme login -pfl username /bin/bash -c exec -la bash /bin/bash
Créer un nom de fichier . profile_login.sh
avec le contenu suivant en ajoutant un
-c ""
à la fin de la commande découverte pour demander à bash de revenir immédiatement, avec un contenu comme celui-ci :
login -pfl username /bin/bash -c exec -la bash /bin/bash -c "" &
sudo sample $! -mayDie # sample the above command
Rendez-le exécutable
$ chmod u+x profile_login.sh
et l'exécuter en utilisant sudo ( sample
l'exige)
$ sudo ./profile_login.sh
OK, alors allez-y et lancez-la. Par exemple en exécutant le purge
d'abord. Sur ma boîte, j'ai obtenu un grand graphique de sortie. En cherchant les "branches numérotées les plus importantes" (généralement en haut), j'ai vu les deux suivantes principaux contrevenants :
Un de quelque chose appelé pam_start
qui semble ouvrir les images de la librairie pam auth
+ ! 1068 pam_start (in libpam.2.dylib) + 132 [0x7fff97295ab0]
+ ! : 1066 openpam_dynamic (in libpam.2.dylib) + 120 [0x7fff97293d14]
+ ! : | + ! 1042 coresymbolication_load_image(CSCppDyldSharedMemoryPage*, ImageLoader const*, unsigned long long) (in dyld) + 143 [0x7fff66725411]
+ ! : | + ! : 1042 mach_msg_trap (in dyld) + 10 [0x7fff6674a472]
et qui est parfois suivi d'un autre délinquant getlastlogxbyname
+ ! 583 getlastlogxbyname (in libsystem_c.dylib) + 212 [0x7fff92b3ef7a]
+ ! : 566 asl_file_open_read (in libsystem_asl.dylib) + 143 [0x7fff8c27030d]
+ ! : | 566 __open_nocancel (in libsystem_kernel.dylib) + 10 [0x7fff97b39012] + ! : | 566 __open_nocancel (in libsystem_kernel.dylib) + 10 [0x7fff97b39012]
Donc, en gros, il y a deux délinquants. L'un est pam
(un certain type de système d'authentification) et l'autre le asl
"détecter votre dernière connexion". Donc apparemment juste en supprimant votre /private/var/log/asl/*.asl
ne suffit pas. Le chargement de la pam est beaucoup plus cher sur ma machine, de toute façon [SSD]. N'hésitez pas à exécuter le script ci-dessus et voyez si votre système est le même. Il est intéressant de noter que le code source de ces appels de méthode semble également être disponible en ligne, par exemple openpam_dynamique
Si je suis la réponse de Darren, et que je remplace ma préférence "shells open with" par autre chose que /bin/bash, je vois alors les lignes suivantes utilisées pour démarrer de nouveaux onglets de terminal :
$ ps -ef | grep login
... login -pfql packrd /bin/bash -c exec -la bash /usr/bin/bash
Donc si j'utilise maintenant le même sample
astuce sur la nouvelle commande de connexion
login -pfql username /bin/bash -c exec -la bash /usr/bin/bash -c "" &
sudo sample $! -mayDie
un stacktrace beaucoup plus petit est généré, le plus grand délinquant étant :
+ 8 pam_end (in libpam.2.dylib) + 190 [0x7fff97294ebb]
+ ! 6 coresymbolication_unload_image(CSCppDyldSharedMemoryPage*, ImageLoader const*) (in dyld) + 143 [0x7fff6e0f634f]
Je pense que c'est parce que le paramètre "-q" de connexion est maintenant utilisé. Apparemment, ce paramètre ignore le chargement des deux modules pam. et en recherchant la dernière heure de connexion (pour les deux délinquants). Selon les docs du login
en touchant la commande ~/.hushlogin
devrait faire la même chose, mais apparemment cela ne fonctionne plus [du moins pour moi avec la 10.10].
Donc, en résumé, supprimer /private/var/log/asl/*.asl n'est pas suffisant (dans mon expérience, cela ne représentait qu'au maximum 1/3 du ralentissement réel, bien que si vous aviez des fichiers mores à cet endroit, cela pourrait représenter un plus grand pourcentage, j'en suis sûr).
Quoi qu'il en soit, en utilisant des scripts similaires, vous devriez être en mesure de dire ce qui cause l'embouteillage de votre machine locale, et voir si la correction ci-dessus s'applique à vous. N'hésitez pas à commenter ici.
UPDATE : il semble que coresymbolication_load_image
peut toujours prendre beaucoup de temps, même si login -pfql
est invoquée (on suppose qu'un module d'authentification Pam ou autre doit se connecter à un serveur de connexion central ou autre, et doit donc attendre une réponse d'une tierce partie). Ainsi, la seule réel La solution que j'ai trouvée est d'utiliser iTerm2, et de changer les préférences -> profils -> général -> Commande en /bin/bash
à la place.
2 votes
Peut-être y a-t-il un autre problème avec votre système ? Il ne devrait pas être si lent. Parfois, cela prend une ou deux secondes pour moi, mais en général, ce n'est qu'une fraction de seconde. Et j'ai pas mal de choses dans
.bash_profile
(voir aussi~/.profile
d'ailleurs). Aussi : notez que vous pouvez commencer à taper pendant que bash se charge, et généralement ce que vous tapez sera copié à l'invite de commande une fois qu'elle sera prête.0 votes
Utilisez-vous un compte réseau ou un répertoire personnel réseau ? Le terminal réagit-il aux entrées de l'utilisateur pendant qu'il crée le terminal ? Affiche-t-il le curseur rotatif occupé ?
1 votes
Pour savoir où Terminal passe son temps, ouvrez le moniteur d'activité, sélectionnez Terminal et cliquez sur le bouton Sample Process de la barre d'outils, puis allez immédiatement dans Terminal et créez une nouvelle fenêtre/un nouvel onglet. L'échantillon peut fournir un indice sur l'utilisation du temps. Observez également la liste des processus dans Activity Monitor : si "login" ou "bash" (ou le shell que vous utilisez) apparaissent dans la liste pendant le délai, cela signifie que le délai se produit probablement dans l'un de ces deux programmes et non dans Terminal.
0 votes
Avez-vous vérifié votre variable PATH ? J'ai remarqué que la mienne était absurdement longue avec de nombreuses répétitions en raison d'une confusion dans les .bashrc. J'ai supprimé les répétitions et tout s'est accéléré !
0 votes
La cause est probablement différente pour chacun, mais pour moi le problème était que mon .bash_profile appelait homebrews
$(brew --prefix coreutils)
à ajouter au $PATH. Cela prend normalement une seconde environ, mais souvent jusqu'à 30 secondes sans raison apparente. J'ai remplacé cette partie par un chemin résolu manuellement (/usr/local/opt/coreutils/libexec/gnubin
) et je n'ai pas eu de problème depuis