OK Ho una conclusione simile a Darren, anche se un meccanismo di profilazione leggermente diverso (l'accesso lento NB può ancora verificarsi in Yosemite).
Ecco un modo per dire a che è effettivamente in esecuzione quando si avvia una nuova finestra di accesso, usando OS X esempio comando profiler.
Scopri quale comando esegue un normale login
$ ps -ef | grep login
Vedrai qualcosa come login -pfl username /bin/bash -c exec -la bash /bin/bash
Crea un nome file di script profile_login.sh
con i seguenti contenuti aggiungendo un
-c ""
alla fine del comando rilevato per richiedere immediatamente il ritorno di bash, con contenuti come questo:
login -pfl username /bin/bash -c exec -la bash /bin/bash -c "" &
sudo sample $! -mayDie # sample the above command
Rendilo eseguibile
$ chmod u+x profile_login.sh
ed eseguirlo usando sudo (il comando sample
lo richiede)
$ sudo ./profile_login.sh
OK, quindi vai avanti ed eseguilo. Ad esempio eseguendo prima il comando purge
. Sulla mia scatola, ho ottenuto un grande grafico di output. Cercando i "più grandi rami numerati" (in genere nella parte superiore) ho visto i seguenti due principali autori di reati :
Uno da qualcosa chiamato pam_start
che sembra aprire le immagini di auth lib di pam
+ ! 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]
e a volte viene seguito da un altro criminale 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]
Quindi sostanzialmente, ci sono due trasgressori. Uno è pam
(un certo tipo di sistema di autenticazione) e l'altro è asl
"rileva il tuo ultimo accesso". Quindi apparentemente solo l'eliminazione dei file /private/var/log/asl/*.asl
non è sufficiente. Il caricamento del pam è molto più costoso sulla mia macchina, comunque [SSD]. Sentiti libero di eseguire lo script sopra e vedere se il tuo sistema è lo stesso. È interessante notare che il codice sorgente per queste chiamate al metodo sembra essere disponibile anche online, ad esempio openpam_dynamic
Se seguo la risposta di Darren e sostituisco la preferenza "shells open" con qualcosa di diverso da / bin / bash, allora vedo le seguenti linee usate per avviare nuove schede di terminale:
$ ps -ef | grep login
... login -pfql packrd /bin/bash -c exec -la bash /usr/bin/bash
Quindi, se ora utilizzo lo stesso trucco sample
sul nuovo comando di accesso
login -pfql username /bin/bash -c exec -la bash /usr/bin/bash -c "" &
sudo sample $! -mayDie
viene generato uno stacktrace molto più piccolo, il più grande autore di reato è:
+ 8 pam_end (in libpam.2.dylib) + 190 [0x7fff97294ebb]
+ ! 6 coresymbolication_unload_image(CSCppDyldSharedMemoryPage*, ImageLoader const*) (in dyld) + 143 [0x7fff6e0f634f]
Penso che questo sia dovuto al fatto che il parametro di login "-q" è ora in uso. Apparentemente questo parametro salta sia il caricamento dei moduli pam che durante la ricerca dell'ultimo tempo di accesso (entrambi i trasgressori). Secondo i documenti del comando login
, toccare il file ~/.hushlogin
dovrebbe fare la stessa cosa, ma a quanto pare questo non funziona più [almeno per me con 10.10].
Quindi, in sintesi, la rimozione di /private/var/log/asl/*.asl non è sufficiente (nel mio esperimento, ha rappresentato solo al massimo 1/3 del rallentamento effettivo, sebbene se ci fossero potrebbe rappresentare una percentuale maggiore ne sono sicuro).
Ad ogni modo usando script simili, dovresti essere in grado di dire cosa sta causando il riavvio della tua macchina locale, e vedere se la correzione sopra riportata si applica a te. Sentiti libero di commentare qui.
UPDATE: sembra che coresymbolication_load_image
possa ancora richiedere un sacco di tempo, anche quando viene invocato login -pfql
(presumibilmente qualche modulo di autenticazione pam o altro deve "chiamare" a un server di login centrale o qualcosa di strano, così ha aspettare una risposta da una terza parte). Quindi l'unica soluzione real che ho trovato è quella di usare iTerm2 e modificare le preferenze - > profili - > generale - > Comando su /bin/bash
invece.