Как я могу ускорить запуск терминала в Lion?
Я имею в виду не запуск приложения терминала, а окна запуска терминала, например, когда я открываю новую вкладку.
У меня ничего нет в моем .bash_profile файл и я бегу rm -rf /private/var/log/asl/*.asl
каждые 4 часа (которые очищают те файлы, которые обычно делают терминал медленным).
В настоящее время, когда я открываю новую вкладку, я могу запустить что-то за 3-4 секунды.
macos
terminal
command-line
Fernando
источник
источник
.bash_profile
(также проверьте~/.profile
Кстати). Также: обратите внимание, что вы можете начать печатать во время загрузки bash, и обычно то, что вы вводите, будет скопировано в командную строку, как только оно будет готово.Ответы:
Короткий ответ:
Проблема вызвана (потенциально) дорогим поиском системного журнала ASL. Чтобы увидеть это в действии, запустите
sudo fs_usage | grep 'asl.*login'
в окне терминала, затем откройте новое окно терминала.Чтобы решить проблему, настройте Терминал для запуска нестандартной оболочки:
sudo ln -s /bin/bash /usr/local/bin/bash
Примечание 1: Вам также может понадобиться добавить
bash
а также-bash
к списку процессов в «Настройки терминала & gt; Профили & gt; Спросить перед закрытием».Заметка 2:
/usr/local/bin
доступен для записи в OS X 10.11 (El Capitan) в режиме Rootless.Чтобы проверить исправление:
login -pfq username /usr/bin/bash
или жеlogin -pfql username ...
Важно: если команда входа в систему не включает
-q
Параметр, то вы не исправили проблему.Вы также можете использовать
sudo fs_usage | grep 'asl.*login'
чтобы проверить это/var/log/asl
не открывается при открытии нового окна терминала.Подробности:
Здесь есть ряд ошибок.
Фактическая причина медлительности
/usr/bin/login
, который по умолчанию будет отображать дату вашего последнего входа в систему. Чтобы получить эту последнюю дату входа в систему, она выполняет поиск в базе данных ASL (Apple System Log) по адресу/var/log/asl/
, Эти файлы журналов могут быть очень сильно фрагментированы, и именно эта фрагментация файлов вызывает задержку при открытии нового окна или вкладки. (Ошибка 1)Единственный способ подавить поиск ASL для последнего входа в систему - передать
-q
параметр для/usr/bin/login
,.hushlogin
Файл также подавляет отображение «Последний вход в систему», но он не подавляет дорогой поиск ASL. (Ошибка 2)Терминал всегда использует
/usr/bin/login
запускать каждое новое окно / оболочку. Нет возможности напрямую запустить оболочку и нет способа напрямую управлять параметрами, передаваемыми в/usr/bin/login
(Ошибка 3).Оказывается, Терминал пройдет
-q
параметр для/usr/bin/login
когда он настроен на использование нестандартный ракушка. (Ошибка 4)-q
Параметр - это то, что нам нужно, чтобы избежать проблемы, поэтому ссылка на/usr/local/bin/bash
,источник
/bin/bash
он ведет себя так, как будто была выбрана оболочка входа по умолчанию. Любая команда, кроме/bin/bash
будет работать правильно, поэтому использование / usr / bin / bash - это просто обходной путь. Эта ошибка отсутствует в Snow Leopard.Что мне было нужно, так это переходить из командной оболочки в команду
/bin/bash -il
в iTerm Настройки & gt; Профили & gt; Общие & gt; команда ,Мне нужна была опция
-l
( Сделайте так, чтобы bash действовал так, как если бы он был вызван как оболочка входа ) добавлен для того, чтобы установить переменные среды из~/.bash_profile
источник
.hushlogin
Создайте пустой файл в вашей домашней папке с именем
.hushlogin
; это значительно сократит время, необходимое для появления вкладки Terminal.app.Вы можете создать
.hushlogin
файл в Terminal.app с помощью следующей команды:Файл вступит в силу немедленно.
Вы можете узнать больше о
.hushlogin
файл и процесс входа в целом в руководство по входу ,Успокоение процесса входа
Когда вы создаете новую вкладку «Терминал», вы проходите процесс входа в систему. Процесс включает в себя выборку различной информации о вашем предыдущем сеансе входа в систему, сообщение дня и отображение системных сообщений. Это может быть источником значительных задержек. Попробуйте скрыть эти сообщения, чтобы увидеть, исчезает ли задержка.
источник
opensnoop
, Смотрите мой ответ ниже.Хорошо, у меня есть вывод, подобный Даррену, хотя немного другой механизм профилирования (медленный вход в систему все еще может происходить в Йосемити)
Вот способ сказать какие на самом деле работает, когда вы запускаете новое окно входа в систему, используя OS X образец Команда профилировщика.
Узнайте, какую команду выполняет обычный логин
Вы увидите что-то вроде
login -pfl username /bin/bash -c exec -la bash /bin/bash
Создать имя файла скрипта
profile_login.sh
со следующим содержанием, добавив-c ""
до конца обнаруженной команды запросить немедленный возврат bash с таким содержимым:
Сделайте это исполняемым
$ chmod u+x profile_login.sh
и запустить его с помощью sudo (
sample
это требует команда)$ sudo ./profile_login.sh
Хорошо, так что давай и запустить его. Например, выполнив
purge
Команда первая. На моем ящике я получил большой график вывода. В поисках «самых больших пронумерованных ветвей» (обычно вверху) я увидел следующие два самые большие преступники :Один из того, что называется
pam_start
который появляется при открытии pam auth lib imagesи это иногда сопровождается другим преступником
getlastlogxbyname
Таким образом, в основном, есть два преступника. Один
pam
(некоторый тип системы аутентификации), а другой -asl
«определить ваш последний логин». Так видимо просто удаляя/private/var/log/asl/*.asl
файлов не достаточно. В любом случае загрузка pam на моей машине намного дороже [SSD]. Не стесняйтесь запустить приведенный выше сценарий и посмотрите, является ли ваша система такой же. Интересно, что исходный код для этих вызовов методов, кажется, также доступен онлайн, например openpam_dynamicЕсли я следую ответу Даррена и заменяю мои предпочтения «открытые оболочки» на что-то отличное от / bin / bash, я вижу следующие строки, используемые для запуска новых вкладок терминала:
Так что, если я сейчас использую то же самое
sample
трюк с новой командой входа в системугенерируется намного меньшая стековая трасса, самым большим нарушителем которой является:
Я думаю, это потому, что сейчас используется параметр входа в систему "-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 -x
который распечатает процесс запуска оболочки.Лично я замечаю только задержку между активацией и деактивацией приложения и на первой вкладке, созданной после периода активности. Это всегда заставляет меня думать, что речь идет о перемещении страниц памяти.
источник
Уменьшите свою историю до 4-10 тысяч строк и, возможно, попробуйте выйти и отбросить все сохраненные окна. Я видел, как оба имеют значение на медленных машинах - особенно те, которые не имеют SSD для хранения.
источник
В моем случае после попытки выше На моей рабочей машине безуспешно я обнаружил, что виновником был Active Directory. Исправление должно было войти в Утилита каталогов и измените настройки службы AD (дважды щелкните «Active Directory»), чтобы включить «Создать учетную запись для мобильных устройств при входе»:
Это, очевидно, приводит к локальному кэшированию учетных данных AD, поэтому системе больше не нужно выходить на сервер каждый раз, когда она пытается подтвердить ваш пароль.
Вы можете получить доступ к Утилите каталогов с помощью Spotlight или через раздел «Параметры входа» в Системных настройках / Пользователи и amp; Группы (нажмите кнопку «Изменить…» рядом с «Сервер сетевых учетных записей»):
источник
Просто беги:
в отдельных терминалах и откройте новое открытие, чтобы увидеть, что выполняется в течение этого времени.
Если ничего не очевидно, попробуйте следующее:
Это напечатает все ваши данные, которые происходят во время загрузки вкладки.
источник
открыто
/etc/profile
и добавьте строкуPATH=""
так это выглядит так:источник
Проблема для меня заключалась в том, что сервер домена Active Directory был недействительным.
Изменение, а затем перезагрузка Mac исправил это.
источник