Хорошо, у меня есть вывод, подобный Даррену, хотя немного другой механизм профилирования (медленный вход в систему все еще может происходить в Йосемити)
Вот способ сказать какие на самом деле работает, когда вы запускаете новое окно входа в систему, используя OS X образец Команда профилировщика.
Узнайте, какую команду выполняет обычный логин
$ ps -ef | grep login
Вы увидите что-то вроде login -pfl username /bin/bash -c exec -la bash /bin/bash
Создать имя файла скрипта profile_login.sh
со следующим содержанием, добавив
-c ""
до конца обнаруженной команды запросить немедленный возврат bash с таким содержимым:
login -pfl username /bin/bash -c exec -la bash /bin/bash -c "" &
sudo sample $! -mayDie # sample the above command
Сделайте это исполняемым
$ chmod u+x profile_login.sh
и запустить его с помощью sudo ( sample
это требует команда)
$ sudo ./profile_login.sh
Хорошо, так что давай и запустить его. Например, выполнив purge
Команда первая. На моем ящике я получил большой график вывода. В поисках «самых больших пронумерованных ветвей» (обычно вверху) я увидел следующие два самые большие преступники :
Один из того, что называется pam_start
который появляется при открытии pam auth lib images
+ ! 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]
и это иногда сопровождается другим преступником 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]
Таким образом, в основном, есть два преступника. Один pam
(некоторый тип системы аутентификации), а другой - asl
«определить ваш последний логин». Так видимо просто удаляя /private/var/log/asl/*.asl
файлов не достаточно. В любом случае загрузка pam на моей машине намного дороже [SSD]. Не стесняйтесь запустить приведенный выше сценарий и посмотрите, является ли ваша система такой же. Интересно, что исходный код для этих вызовов методов, кажется, также доступен онлайн, например openpam_dynamic
Если я следую ответу Даррена и заменяю мои предпочтения «открытые оболочки» на что-то отличное от / bin / bash, я вижу следующие строки, используемые для запуска новых вкладок терминала:
$ ps -ef | grep login
... login -pfql packrd /bin/bash -c exec -la bash /usr/bin/bash
Так что, если я сейчас использую то же самое sample
трюк с новой командой входа в систему
login -pfql username /bin/bash -c exec -la bash /usr/bin/bash -c "" &
sudo sample $! -mayDie
генерируется намного меньшая стековая трасса, самым большим нарушителем которой является:
+ 8 pam_end (in libpam.2.dylib) + 190 [0x7fff97294ebb]
+ ! 6 coresymbolication_unload_image(CSCppDyldSharedMemoryPage*, ImageLoader const*) (in dyld) + 143 [0x7fff6e0f634f]
Я думаю, это потому, что сейчас используется параметр входа в систему "-q". Видимо этот параметр пропускает обе загрузки модулей pam а также поиск последнего времени входа (оба нарушителя). Согласно документам login
команда, касаясь ~/.hushlogin
Файл должен делать то же самое, но, очевидно, это больше не работает [по крайней мере, для меня с 10.10].
Итак, в итоге, удаление /private/var/log/asl/*.asl недостаточно (в моем эксперименте на него приходилось не более 1/3 фактического замедления, хотя, если бы у вас были файлы mores, на него можно было для большего процента я уверен).
В любом случае, используя похожие сценарии, вы должны быть в состоянии определить причину, по которой ваш локальный компьютер зависает, и посмотреть, относится ли это исправление к вам. Не стесняйтесь комментировать здесь.
ОБНОВЛЕНИЕ: кажется, что coresymbolication_load_image
все еще может занять кучу времени, даже когда login -pfql
вызывается (предположительно, какой-то модуль аутентификации pam или другой должен «дозвониться» до центрального сервера входа в систему или какой-то другой, поэтому должен ждать ответа от третьей стороны). Так что единственное реальный Обходное решение, которое я нашел, - это использовать iTerm2 и изменить настройки - & gt; профили - & gt; общее - & gt; Команда для /bin/bash
вместо.
.bash_profile
(также проверьте~/.profile
Кстати). Также: обратите внимание, что вы можете начать печатать во время загрузки bash, и обычно то, что вы вводите, будет скопировано в командную строку, как только оно будет готово.