새로운 터미널 탭 로딩 시간을 어떻게 단축합니까?


93

Lion에서 터미널 시작 속도를 높이려면 어떻게해야합니까?

터미널 응용 프로그램의 시작을 말하는 것이 아니라 새 탭을 열 때와 같은 시작 터미널 창을 말합니다.

.bash_profile 파일에 아무것도 없으며 rm -rf /private/var/log/asl/*.asl4 시간마다 실행 됩니다 (일반적으로 터미널 속도를 늦추는 파일을 지 웁니다).

현재 새 탭을 열면 무언가를 실행할 수있을 때까지 3-4 초가 걸립니다.


2
시스템에 다른 문제가 있습니까? 그렇게 느려서는 안됩니다. 때로는 저에게 1-2 초가 걸리지 만 보통은 아주 짧은 시간입니다. 그리고 나는 약간의 여유가 있습니다 .bash_profile(또한 확인하십시오 ~/.profile). 또한 : bash 가로 드되는 동안 입력을 시작할 수 있으며 일반적으로 입력 한 내용은 준비가되면 명령 프롬프트에 복사됩니다.
Abhi Beckert

네트워크 계정 또는 네트워크 홈 디렉토리를 사용하고 있습니까? 터미널이 터미널을 생성하는 동안 사용자 입력에 응답합니까? 회전 중 커서를 표시합니까?
Chris 페이지

1
터미널이 시간을 보내는 곳을 찾으려면 활동 모니터를 열고 터미널을 선택하고 샘플 프로세스 도구 모음 단추를 클릭 한 다음 터미널로 즉시 이동하여 새 창 / 탭을 만듭니다. 샘플은 시간이 어디로 가고 있는지에 대한 힌트를 제공 할 수 있습니다. 또한 활동 모니터에서 프로세스 목록을 살펴보십시오. 지연 중에 "로그인"또는 "bash"(또는 사용중인 쉘)가 목록에 표시되면 두 프로그램 중 하나에서 지연이 발생할 수 있음을 의미합니다. 단말기.
Chris 페이지

PATH 변수를 확인 했습니까? 혼란스러운 .bashrc 작업으로 인해 내 반복이 너무 길다는 것을 알았습니다. 나는 반복을 제거하고 모든 것이 가속화되었습니다!
190290000 루블 맨

답변:


93

짧은 답변:

이 문제는 (잠재적으로) 값 비싼 ASL 시스템 로그 조회로 인해 발생합니다. 이 동작을 보려면 sudo fs_usage | grep 'asl.*login'터미널 창에서 실행 한 다음 새 터미널 창을여십시오.

이 문제를 해결하려면 비표준 쉘을 시작하도록 터미널을 구성하십시오.

  1. 선호하는 쉘에 대한 심볼릭 링크를 만듭니다. 예 :sudo ln -s /bin/bash /usr/local/bin/bash
  2. 터미널 환경 설정을 열고 "일반"탭을 선택하십시오.
  3. "Shells open with : Command"를 선택하고 1 단계에서 만든 심볼릭 링크를 입력하십시오 (예 : "/ usr / local / bin / bash").

참고 1 : "터미널 기본 설정> 프로필> 셸> 닫기 전에 확인"에서 프로세스 목록 을 추가 bash하고 -bash프로세스 목록에 추가해야 할 수도 있습니다 .

참고 2 : /usr/local/binOS X 10.11 (El Capitan) Rootless 모드에서 쓸 수 있습니다.

수정 사항을 확인하려면 다음을 수행하십시오.

  • 새 터미널 창을 엽니 다.
  • "마지막 로그인 :"이 맨 위에 표시 되지 않아야 합니다.
  • 인스펙터 (Command + I)를 열고 정보 탭을 선택하십시오.
  • 명령은 login -pfq username /usr/bin/bash또는login -pfql username ...

중요 사항 : login 명령에 -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매개 변수를 전달합니다 . (버그 4)/usr/bin/login

-q매개 변수는 우리가 문제를 방지하기에 따라서 심볼릭 링크를해야 할 것입니다 /usr/local/bin/bash.


6
명령이 / bin / bash에 대한 심볼릭 링크이고 / bin / bash 인 경우 -q가 추가 된 이유를 알고 있습니까?
Lri November

3
@LauriRanta 10.7 및 10.8 터미널의 버그 인 것 같습니다. 시작 명령이 설정 /bin/bash되면 기본 로그인 쉘이 선택된 것처럼 동작합니다. 이외의 명령 /bin/bash은 올바르게 작동하므로 / usr / bin / bash를 사용하는 것이 해결 방법 일뿐입니다. Snow Leopard에는이 버그가 없습니다.
Darren

5
@Darren이 의심되는 버그를 Apple에보고 했습니까? 그렇지 않다면 다음을 통해 수행하십시오. bugreport.apple.com
Graham Miln

3
불행히도 이로 인해 Yosemite에서 터미널을 닫을 때마다 bash가 실행됩니다. 그래서이 아닌 좋은 수정 :(
클로스 Jørgensen은

2
@ ClausJørgensen 나는 그 문제를 경험하지 못했습니다. 프로필 탭에서 "쉘"설정을 확인할 수 있습니다.
Darren

20

내가 필요한 것은 /bin/bash -il iTerm의 환경 설정> 프로파일> 일반> 명령 에서 로그인 쉘에서 명령으로 변경하는 것이 었습니다 .

나는 옵션을 필요 -l( 이 로그인 쉘로 호출 된 것처럼 bash는 행위를 확인 에서 환경 변수를 설정하기 위해 추가)~/.bash_profile


허용 된 질문에 따라 ASL의 로그인 검색을 중지하는
user151019

4
모든 솔루션 중에서이 솔루션이 나를 위해 일했습니다. +50!
Bhavin Doshi

1
이 글타래에 대한 훌륭한 정보! 이것은 심볼릭 링크 또는 다른 것을 만들 필요가 없기 때문에 내가 사용한 솔루션입니다. 내 새로운 쉘 시작 시간이 ~ 5-10 초에서이 솔루션으로 즉시 바뀌 었습니다.
DustinB

16

.Hushlogin

홈 폴더에 .hushlogin; 라는 빈 파일을 만듭니다 . 이렇게하면 Terminal.app 탭이 표시되는 데 걸리는 시간이 크게 줄어 듭니다.

.hushlogin다음 명령을 사용하여 Terminal.app 에서 파일을 만들 수 있습니다 .

touch ~/.hushlogin

파일이 즉시 적용됩니다.

.hushlogin파일 및 로그인 프로세스에 대한 자세한 내용은 일반적으로 로그인 매뉴얼을 참조하십시오 .

로그인 프로세스 종료

새 터미널 탭을 만들면 로그인 프로세스가 진행됩니다. 이 프로세스에는 이전 로그인 세션, 오늘의 메시지 및 시스템 메시지 표시에 대한 다양한 정보를 가져옵니다. 이것은 상당한 지연의 원인이 될 수 있습니다. 이 메시지를 숨겨 지연이 사라지는 지 확인하십시오.


6
.hushlogin은 실제로 문제를 해결하지 않습니다. 을 사용하여 확인할 수 있습니다 opensnoop. 아래 답변을 참조하십시오.
Darren

1
@Darrren : man login에서 알려줍니다 : -q 마치 .hushlogin이있는 것처럼 자동 로그인을 강제 실행합니다. q 옵션은 문제를 방지하지만 hushlogin과 동일합니다.
Christian

8

확인 프로파일 링 메커니즘이 약간 다르지만 Darren과 비슷한 결론을 내 렸습니다 (NB 느린 로그인은 여전히 ​​요세미티에서 발생할 수 있음).

여기서 알 수있는 방법 은 무엇 당신이 OS X의 사용, 새 로그인 창을 시작할 때 실제로 실행되는 샘플 프로파일 명령.

일반 로그인 실행이 어떤 명령인지 확인

$ ps -ef | grep login

당신은 같은 것을 보게 될 것입니다 login -pfl username /bin/bash -c exec -la bash /bin/bash

profile_login.sh다음 내용을 추가하여 스크립트 파일 이름 을 작성하십시오 .

-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_startpam auth lib 이미지를 여는 것처럼 보이는 것 중 하나

+   ! 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 는 충분하지 않습니다. pam 로딩은 어쨌든 [SSD] 내 컴퓨터에서 훨씬 비쌉니다. 위의 스크립트를 실행하여 시스템이 동일한 지 확인하십시오. 흥미롭게도 이러한 메소드 호출의 소스 코드는 온라인에서도 사용할 수 있습니다 (예 : openpam_dynamic).

Darren의 대답에 따라 "bins open"을 / 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"매개 변수가 사용 중이기 때문이라고 생각합니다. 분명히이 매개 변수는 모두 PAM 모듈을로드 생략 하고 마지막 로그인 시간 (모두 범죄자를) 찾고입니다. login명령 의 문서에 따르면 ~/.hushlogin파일을 터치하면 동일한 작업을 수행해야하지만 분명히 더 이상 작동하지 않습니다 (적어도 10.10의 경우).

따라서 요약하면 /private/var/log/asl/*.asl을 제거하는 것만으로는 충분하지 않습니다 (실험에서 실제 속도의 최대 1/3 만 차지했지만 더 많은 파일이 있으면 계정을 만들 수 있습니다) 더 큰 비율을 확신합니다).

어쨌든 비슷한 스크립트를 사용하면 로컬 컴퓨터가 다운되는 원인을 알려주고 위의 수정 사항이 적용되는지 확인할 수 있습니다. 여기에 의견을 주시기 바랍니다.

업데이트 : 호출 된 coresymbolication_load_image경우에도 여전히 많은 시간이 걸릴 수 있습니다 login -pfql(아마도 일부 pam 인증 모듈 또는 기타는 중앙 로그인 서버에 "다이얼 아웃"해야하거나 이상한 것이므로 타사의 응답을 기다려야합니다 ). 그래서 유일한 실제 > 프로파일 - -> 일반 -> 명령에 내가 찾은 해결 방법은 iTerm2를 사용하고 기본 설정을 변경하는 /bin/bash대신.


1
ASL 조회 외에도 로그인 지연은 대부분 사용자 정보를 요청할 때 느리게 응답하는 디렉토리 서버가있는 네트워크에 있기 때문에 발생합니다. 디렉토리 서비스가 활성화 된 네트워크에 있지 않다면 일반적인 시스템 혼잡 (CPU 사용량, 메모리 부족, I / O 혼잡) 이외의 다른 시간이 얼마나 걸릴지 모르겠습니다.
Chris 페이지

@ChrisPage 네, 아마도 일부 네트워크 디렉토리는 무언가 또는 다른 유용한 팁을 제공 할 것입니다.
rogerdpack

3

원인을 조사하는 것이 전부입니다. bash -x셸을 시작하는 프로세스를 인쇄하는 프로세스를 입력하여 프로세스가 시작되는 동안 수행 된 작업을 확인할 수 있습니다 .

개인적으로, 나는 앱의 활성화와 비활성화 사이의 지연과 활동 기간 후에 생성 된 첫 번째 탭에서만 나타납니다. 항상 메모리 페이지가 이동하는 것에 관한 것이라고 생각합니다.


2

역사를 4 ~ 10 만 줄로 줄이 고 저장된 모든 창을 종료하고 버려보십시오. 나는 둘 다 느린 머신, 특히 스토리지 용 SSD가없는 머신에서 차이를 만드는 것을 보았습니다.


2

필자의 경우, 내 작업 시스템 에서 위의 시도 를 성공하지 못한 채 범인이 Active Directory라는 것을 알았습니다. 수정은 디렉토리 유틸리티 로 이동 하여 AD 서비스 설정 ( "Active Directory"를 두 번 클릭)을 편집하여 "로그인시 모바일 계정 작성"을 활성화하는 것입니다.

Active Directory 설정이 열려있는 디렉토리 유틸리티 응용 프로그램의 스크린 샷

이로 인해 AD 자격 증명이 로컬로 캐시되므로 암호를 확인하려고 할 때마다 시스템이 더 이상 서버로 나가지 않아도됩니다.

Spotlight를 사용하거나 시스템 환경 설정 / 사용자 및 그룹의 "로그인 옵션"섹션을 통해 디렉토리 유틸리티로 이동할 수 있습니다 ( "네트워크 계정 서버"옆의 "편집…"버튼 선택).

"로그인 옵션"및 "편집…"을 표시하는 사용자 및 그룹 창


0

그냥 실행 :

sudo creatbyproc.d
sudo newproc.d

별도의 터미널에서 새 열기를 열어 해당 시간 동안 무엇이 실행되고 있는지 확인하십시오.

분명하지 않은 경우 다음을 시도하십시오.

sudo dtruss -an Terminal

탭 로딩 시간에 발생하는 모든 세부 사항이 인쇄됩니다.


0

다음과 같이 /etc/profile행을 열고 추가하십시오 PATH="".

if [ -x /usr/libexec/path_helper ]; then
    PATH=""
    eval `/usr/libexec/path_helper -s`
fi

0

나에게 문제는 Active Directory 도메인 서버가 잘못되었다는 것입니다.

변경 후 Mac을 재부팅하면 문제가 해결되었습니다.

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.