Гаразд, я маю подібний висновок у Даррена, хоча дещо інший механізм профілювання (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, і зазвичай те, що ви вводите, буде скопійовано в командний рядок, як тільки воно буде готове.