Как ускорить запуск терминала в Lion?
Я имею в виду не запуск приложения Terminal, а запуск окон терминала, например, когда я открываю новую вкладку.
У меня нет ничего в файле .bash_profile, и я запускаю rm -rf /private/var/log/asl/*.asl
каждые 4 часа (что очищает те файлы, которые обычно делают терминал медленным).
В настоящее время, когда я открываю новую вкладку, проходит 3-4 секунды, прежде чем я смогу что-то запустить.
Короткий Ответ:
Проблема вызвана (потенциально) дорогую систему АСЛ журнала поиска. Чтобы увидеть это в действии, выполните команду sudo fs_usage | грэп 'язык жестов.*логин' в окно терминала, затем откройте новое окно терминала.
Чтобы решить проблему, настроить терминал для запуска нестандартной оболочки:
судо ЛН-з /бин/Баш /usr/местные/Бен/Баш
Примечание 1: Вам также может понадобиться, чтобы добавить Баш
и `-баш на список процессов в "Терминал предпочтения и GT; профили > Шелл > задать до закрытия и".
Примечание 2: /usr/местные/Бен
для записи в ОС Х 10.11 (Эль Капитан) режим Безродные.
Проверка устранения ошибки:
Важно: если команда login не включает параметр -Q
, то вы не исправили проблему.
Вы также можете использовать sudo fs_usage | грэп 'язык жестов.*логин'
чтобы убедиться `в/var/журнал/асль не доступны при открытии нового окна терминала.
Детали:
Есть ряд ошибок в игре здесь.
Фактической причиной медлительности является /usr/Бен/логин
, которая по умолчанию отображается дата вашего последнего входа. Чтобы получить эту последнюю дату входа в систему, он ищет АСЛ базы данных (системы Apple бревно) в каталоге/var/журнал/АСЛ/`. Эти файлы журналов могут быть очень сильно фрагментирован, и это's это фрагментации файлов, что вызывает задержки при открытии в новом окне или вкладке. (Ошибка 1)
Единственный способ подавить поиска АСЛ для послед-передать параметр -Q
, чтобы /usr/Бен/логин
. Этот `.файл hushlogin также будет подавлять в "послед" и дисплей, но он не подавляет дорогих поиска АСЛ. (Ошибка 2)
Терминал всегда использует /usr/Бен/login
, чтобы запустить каждое новое окно/оболочки. Там нет опции, чтобы запустить снаряд прямо, ни есть ли способ, чтобы напрямую управлять параметрами /usr/Бен/логин
(Ошибка 3).
Как оказалось, терминал будет передавать параметр -Q
, чтобы /usr/Бен/логин
, когда он настроен, чтобы использовать нестандартные оболочки. (Ошибка 4)
Параметр -Q
, то это то, что нужно, чтобы избежать этой проблемы, отсюда и ссылка на /usr/местные/Бен/Баш
.
Мне нужно было изменять от оболочки войти в команду `/Бен/Баш-иль в iTerm в'ов предпочтения и GT; профили и gt; Общие > команда.
Мне нужна опция -L
(принять закон Баш, как если бы был вызван в качестве оболочки входа) добавлена для того, чтобы установить переменные среды от ~/.файл
Создайте в домашней папке пустой файл с именем .hushlogin
; это значительно сократит время появления вкладки Terminal.app.
Файл .hushlogin
можно создать в Terminal.app с помощью следующей команды:
touch ~/.hushlogin
Файл вступит в силу немедленно.
Более подробно о файле .hushlogin
и о процессе входа в систему в целом можно узнать из руководства по входу в систему.
Когда вы создаете новую вкладку Terminal, вы проходите процесс входа в систему. Этот процесс включает в себя получение различной информации о предыдущем сеансе входа в систему, сообщение дня и вывод системных сообщений. Это может быть источником значительных задержек. Попробуйте отключить эти сообщения и посмотреть, исчезнет ли задержка.
ОК, я к такому же выводу для Даррена, правда, немного другой механизм профилирования (НБ медленного входа все еще может произойти в Йосемити).
Здесь's не способ сказать что на самом деле работает, когда вы запускаете новое окно входа в систему с использованием ОС Х Пример команда профайлера.
Узнайте, что команда нормальная выполнение входа
$ ps -ef | grep login
Вы'МР ГЭЭ что-то вроде логин -ПФЛ логин /бин/Баш-с свдв -Ла-Баш /бин/Баш
Создать файл сценария profile_login.sh
со следующим содержанием путем добавления
-с " и"
в
к концу обнаружен команду просить, что баш немедленно вернуться, с содержанием вроде этого:
login -pfl username /bin/bash -c exec -la bash /bin/bash -c "" &
sudo sample $! -mayDie # sample the above command
Сделайте его исполняемым
$ у чмод+х profile_login.sh
и запустить его с помощью sudo ("образец" команда требует его)
$ судо ./profile_login.sh
Итак, вперед и запустите его. Например, выполняя команду "очистить" в первую очередь. На моей коробке, я получил большой график выхода. Ищу в "больших пронумерованных ветвей и" (обычно в верхней части) я увидел следующие два большая правонарушителей:
Один из так называемых 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]
Так что, по сути, есть два преступника. Один " Пэм " (некую систему аутентификации) и другие его АСЛ
то "обнаружить ваш последний логин" и прочее. Так что, видимо, просто удаление `/отдельный файл/var/журнал/АСЛ/*.файлы асль не хватает. Погрузка пам намного дороже, на моей машине, во всяком случае [ССД]. Не стесняйтесь запустите указанный выше сценарий и увидеть, если ваша система такая же. Интересно, что исходный код для этих вызовов метода, похоже, также будет доступна в интернете, например openpam_dynamic
Если я следую Даррен'ы ответ, и заменить на "снаряды открыть с" выбрать что-то другое, чем /bin/Баш, то я вижу следующие строки, используемая для запуска нового терминала вкладки:
$ ps -ef | grep login
... login -pfql packrd /bin/bash -c exec -la bash /usr/bin/bash
Так что если я теперь использовать тот же "образец" трюк на новый логин команду
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]
Я думаю, это потому, что логин и"-М" и параметр используется сейчас. Видимо, этот параметр пропускает в обе загрузки Пэм модулей и просмотр до последнего времени входа (как преступников). По словам доктора команды логин
, трогательно `~/.файл hushlogin должны сделать то же самое, но, видимо, это больше не работает [по крайней мере для меня с 10.10].
Так, в резюме, снятие /отдельный файл/var/журнал/АСЛ/*.АСЛ не хватает (в моем эксперименте, он только составляли не более 1/3 фактических замедление, хотя если у вас нравы файлы есть на ее долю будет приходиться больший процент Я'м точно).
В любом случае, используя подобные скрипты, вы должны быть в состоянии сказать, что's причиной вашей машине увязнуть, и посмотреть, если исправить выше относится и к вам. Не стесняйтесь комментировать здесь.
Обновление: кажется, что coresymbolication_load_image
еще могут занять массу времени, даже тогда, когда логин -pfql
вызывается (предположительно какой-пам-модуль проверки подлинности или другой возникают, чтобы "набрать" до центрального входа на сервер, или что там еще, так что приходится ждать ответа от 3-й партии). Поэтому единственный реальный временное решение я нашел-это использовать iTerm2, и изменить настройки-и GT; профили -и gt; Общие -> команда до /бен/Баш
вместо этого.
Главное - выяснить причину. Посмотреть, что'делается во время запуска процесса, можно, введя команду bash -x
, которая выведет процесс запуска оболочки.
Лично я замечаю задержку только между активацией и деактивацией приложения и в первой вкладке, созданной после некоторого периода активности. Это всегда наводит меня на мысль, что дело в перемещении страниц памяти.
В моем случае, после попытки выше на своей рабочей машине без успеха, я обнаружил, что виновник был активный каталог. Исправление было идти в служебная Директория и отредактировать параметры рекламной службы (дважды щелкните на "ьquot активный каталог&;) для того, чтобы "и создать мобильный счет при входе на":
Это, видимо, вызывает учетные данные ad, которые будут кэшироваться локально, поэтому система больше не должна выходить на сервер каждый раз, когда он пытается проверить пароль.
Вы можете получить для каталога утилита с помощью Spotlight или через в "Параметры входа" в разделе Системные настройки / Пользователи & группы (выберите и"редактировать..." и кнопку рядом, чтобы "Сетевая учетная запись на сервере", у):
Проблема для меня заключалась в том, что домен Active Directory сервер был недействительным.
Меняется он после перезагрузки Мак исправила.
Просто запустите:
sudo creatbyproc.d
sudo newproc.d
в отдельных терминалов и открыть новый открыть, чтобы увидеть, что выполняется в это время.
Если ничего очевидного, попробуйте следующее:
sudo dtruss -an Terminal
Это позволит распечатать все детали, которые происходят на вкладку время загрузки.
Откройте файл/etc/профиль и добавьте строку путь=" и"
в так это выглядит так:
if [ -x /usr/libexec/path_helper ]; then
PATH=""
eval `/usr/libexec/path_helper -s`
fi