Гаразд, я маю подібний висновок у Даррена, хоча дещо інший механізм профілювання (NB повільний вхід все ще може відбуватися в Йосеміті).
Ось спосіб , щоб сказати , що насправді працює , коли ви починаєте нове вікно входу в систему , використовуючи OS X зразок команди Профілювальники.
Дізнайтеся, яку команду виконує звичайний вхід для входу
$ ps -ef | grep login
Ви побачите щось подібне login -pfl username /bin/bash -c exec -la bash /bin/bash
Створіть ім'я файлу сценарію profile_login.sh
з наступним вмістом, додавши a
-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
що, як видається, відкриває пам’ятки авторизованих зображень
+ ! 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
файли недостатньо. Завантаження пам’яті набагато дорожче на моїй машині, у будь-якому випадку [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" для входу. Мабуть, цей параметр пропускає як завантаження пам модулів, так і пошук останнього часу входу (обидва правопорушника). Згідно з документами login
команди, торкання ~/.hushlogin
файлу має робити те саме, але, мабуть, це більше не працює [принаймні для мене з 10.10].
Отже, підсумовуючи, видалення /private/var/log/asl/*.asl недостатньо (у моєму експерименті це становило не менше 1/3 фактичного уповільнення, хоча, якщо у вас там були мур-файли, це могло б врахувати на більший відсоток я впевнений).
У будь-якому випадку, використовуючи подібні сценарії, ви маєте змогу розповісти про те, що змушує ваш локальний апарат занепасти, і побачити, чи стосується вищезгаданого виправлення. Сміливо коментуйте тут.
ОНОВЛЕННЯ: здається, що це coresymbolication_load_image
може зайняти багато часу, навіть коли ви login -pfql
викликаєте (мабуть, якийсь модуль автентифікації пам або інший потребує "набору" на центральний сервер входу або якийсь непарний, тому доводиться чекати відповіді від третьої сторони ). Отже, єдиний реальний спосіб, який я знайшов, - це використовувати iTerm2 і /bin/bash
замість цього змінити налаштування -> профілі -> загальні -> Команда .
.bash_profile
(теж перевіряю~/.profile
до речі). Також: зауважте, що ви можете почати вводити текст під час завантаження bash, і зазвичай те, що ви вводите, буде скопійовано в командний рядок, як тільки воно буде готове.