Como acelerar a inicialização do terminal no Lion?
Não estou me referindo à inicialização do aplicativo Terminal, mas às janelas do terminal de inicialização, como quando abro uma nova guia.
Não tenho nada no meu arquivo .bash_profile e corro a rm -rf /private/var/log/asl/*.asl
cada 4 horas (que limpa os arquivos que normalmente tornam o terminal lento).
Atualmente, quando abro uma nova guia, leva de 3 a 4 segundos até que eu possa executar alguma coisa.
macos
terminal
command-line
Fernando
fonte
fonte
.bash_profile
(também verifique~/.profile
a propósito). Além disso: observe que você pode começar a digitar enquanto o bash está carregando e, geralmente, o que você digita será copiado no prompt de comando quando estiver pronto.Respostas:
Resposta curta:
O problema é causado por uma pesquisa de log do sistema ASL (potencialmente) cara. Para ver isso em ação, execute
sudo fs_usage | grep 'asl.*login'
em uma janela do Terminal e abra uma nova janela do Terminal.Para resolver o problema, configure o Terminal para iniciar um shell não padrão:
sudo ln -s /bin/bash /usr/local/bin/bash
Nota 1: Você também pode precisar adicionar
bash
e-bash
à lista de processos em "Preferências do terminal> Perfis> Shell> Perguntar antes de fechar".Nota 2:
/usr/local/bin
é gravável no modo sem raiz do OS X 10.11 (El Capitan).Para verificar a correção:
login -pfq username /usr/bin/bash
oulogin -pfql username ...
Importante: Se o comando login não incluir o
-q
parâmetro, você não resolveu o problema.Você também pode usar
sudo fs_usage | grep 'asl.*login'
para verificar/var/log/asl
se não é acessado ao abrir uma nova janela do Terminal.Detalhes:
Há vários bugs em jogo aqui.
A causa real da lentidão é a
/usr/bin/login
que, por padrão, exibirá a data do seu último login. Para obter essa última data de login, ele pesquisa no banco de dados ASL (Apple System Log) em/var/log/asl/
. Esses arquivos de log podem ser muito fragmentados e é essa fragmentação que causa o atraso ao abrir uma nova janela ou guia. (Bug 1)A única maneira de suprimir a busca ASL por último login é passar o
-q
parâmetro para/usr/bin/login
. O.hushlogin
arquivo também suprimirá a exibição "Último login", mas não suprimirá a pesquisa cara de ASL. (Bug 2)O terminal sempre usa
/usr/bin/login
para iniciar cada nova janela / shell. Não há opção para iniciar um shell diretamente nem existe uma maneira de controlar diretamente os parâmetros passados para/usr/bin/login
(Bug 3).Como se vê, o Terminal passará o
-q
parâmetro para/usr/bin/login
quando estiver configurado para usar um shell não padrão . (Bug 4)O
-q
parâmetro é o que precisamos para evitar o problema, daí o link simbólico para/usr/local/bin/bash
.fonte
/bin/bash
ele se comporta como se o Shell de Login Padrão estivesse selecionado. Qualquer comando que/bin/bash
não funcione corretamente, portanto, usar / usr / bin / bash é apenas uma solução alternativa. Este bug não está presente no Snow Leopard.O que eu precisava era mudar do shell de login para o comando
/bin/bash -il
em Preferências do iTerm > Perfis> Geral> Comando .Eu precisava da opção
-l
( Fazer o bash agir como se tivesse sido chamado como um shell de login ) adicionada para definir variáveis ambientais de~/.bash_profile
fonte
.hushlogin
Crie um arquivo vazio na sua pasta pessoal chamada
.hushlogin
; isso diminuirá significativamente o tempo necessário para que uma guia Terminal.app apareça.Você pode criar o
.hushlogin
arquivo no Terminal.app usando o seguinte comando:O arquivo entrará em vigor imediatamente.
Você pode aprender mais sobre o
.hushlogin
arquivo e o processo de login em geral no manual de login .Silenciando o processo de login
Ao criar uma nova guia Terminal, você está passando pelo processo de login. O processo envolve buscar várias informações sobre sua sessão de login anterior, mensagem do dia e exibir mensagens do sistema. Isso pode ser a fonte de atrasos significativos. Tente ocultar essas mensagens para ver se o atraso desaparece.
fonte
opensnoop
. Veja minha resposta abaixo.OK. Eu tenho uma conclusão semelhante a Darren, embora o mecanismo de criação de perfil seja ligeiramente diferente (o login lento do NB ainda pode ocorrer em Yosemite).
Aqui está uma maneira de saber o que realmente está em execução quando você inicia uma nova janela de login, usando o comando OS X sample profiler.
Descubra qual comando um logon normal executa
Você verá algo como
login -pfl username /bin/bash -c exec -la bash /bin/bash
Crie um nome de arquivo de script
profile_login.sh
com o seguinte conteúdo adicionando um-c ""
até o final do comando descoberto para solicitar que o bash retorne imediatamente, com conteúdo como este:
Torne executável
$ chmod u+x profile_login.sh
e execute-o usando o sudo (o
sample
comando exige)$ sudo ./profile_login.sh
OK, então vá em frente e execute-o. Por exemplo, executando o
purge
comando primeiro. Na minha caixa, recebi um grande gráfico de saída. Procurando pelos "maiores ramos numerados" (normalmente no topo), vi os dois maiores infratores a seguir :Um de algo chamado
pam_start
que parece abrir imagens pam auth libe que às vezes é seguido por outro infrator
getlastlogxbyname
Então, basicamente, existem dois criminosos. Um é
pam
(algum tipo de sistema de autenticação) e o outro é oasl
"detecte seu último login". Então, aparentemente, apenas excluir seus/private/var/log/asl/*.asl
arquivos não é suficiente. O carregamento do pam é muito mais caro na minha máquina, de qualquer maneira [SSD]. Sinta-se livre para executar o script acima e veja se o seu sistema é o mesmo. Curiosamente, o código-fonte para essas chamadas de método também parece estar disponível online, por exemplo, openpam_dynamicSe eu seguir a resposta de Darren e substituir minhas preferências de "shell aberto por" por algo diferente de / bin / bash, vejo as seguintes linhas usadas para iniciar novas guias de terminal:
Portanto, se agora eu usar o mesmo
sample
truque no novo comando de loginum stacktrace muito menor é gerado, sendo o maior infrator:
Eu acho que isso ocorre porque o parâmetro de login "-q" está sendo usado agora. Aparentemente, esse parâmetro ignora o carregamento dos módulos pam e a consulta do último horário de login (ambos os infratores). De acordo com a documentação do
login
comando, tocar no~/.hushlogin
arquivo deve fazer a mesma coisa, mas aparentemente isso não funciona mais [pelo menos para mim com 10.10].Portanto, em resumo, remover /private/var/log/asl/*.asl não é suficiente (no meu experimento, ele representou apenas 1/3 da desaceleração real, embora se você tivesse mais arquivos ali, ele poderia ser responsável para uma porcentagem maior, tenho certeza).
De qualquer forma, usando scripts semelhantes, você será capaz de dizer o que está causando um problema na sua máquina local e verificar se a correção acima se aplica a você. Sinta-se livre para comentar aqui.
UPDATE: parece que
coresymbolication_load_image
ainda pode demorar muito tempo, mesmo quandologin -pfql
é invocado (presumivelmente, algum módulo de autenticação pam ou outro está tendo que "discar" para um servidor de login central ou algo estranho, portanto, é necessário aguardar uma resposta de um terceiro ) Portanto, a única solução real que encontrei é usar o iTerm2 e alterar as preferências -> profiles -> general -> Command em/bin/bash
vez disso.fonte
É tudo uma questão de investigar a causa. Você pode ver o que está sendo feito enquanto o processo é iniciado, inserindo o
bash -x
que imprimirá o processo de inicialização do shell.Pessoalmente, só percebo o atraso entre a ativação e a desativação do aplicativo e na primeira guia criada após um período de atividade. Sempre me faz pensar que se trata de movimentar páginas de memória.
fonte
Reduza seu histórico para algo entre 4 e 10 mil linhas e talvez tente sair e descartar todas as janelas salvas. Eu já vi os dois fazerem diferença em máquinas mais lentas - especialmente aquelas sem SSD para armazenamento.
fonte
No meu caso, depois de tentar o acima na minha máquina de trabalho sem sucesso, descobri que o culpado era o Active Directory. A correção foi entrar no Directory Utility e editar as configurações do serviço AD (clique duas vezes em "Active Directory") para ativar "Criar conta móvel no login":
Aparentemente, isso faz com que as credenciais do AD sejam armazenadas em cache localmente, para que o sistema não precise mais sair para o servidor toda vez que tentar validar sua senha.
Você pode acessar o Directory Utility with Spotlight ou através da seção "Opções de login" das Preferências do sistema / Usuários e grupos (selecione o botão "Editar ..." ao lado de "Servidor de contas de rede"):
fonte
Apenas corra:
em terminais separados e abra o novo open para ver o que está sendo executado durante esse período.
Se nada for óbvio, tente o seguinte:
Isso imprimirá todos os detalhes que estão acontecendo no tempo de carregamento da guia.
fonte
Abra
/etc/profile
e adicione a linhaPATH=""
para que fique assim:fonte
O problema para mim foi que o servidor de domínio do diretório ativo era inválido.
Alterando-o e reiniciando o Mac, ele foi corrigido.
fonte