2010-12-04 2 views

답변

46

시도 파일의 시작 부분에 이것을 추가 :

# set the trace prompt to include seconds, nanoseconds, script name and line number 
# This is GNU date syntax; by default Macs ship with the BSD date program, which isn't compatible 
PS4='+$(date "+%s:%N") %N:%i> ' 
# save file stderr to file descriptor 3 and redirect stderr (including trace 
# output) to a file with the script's PID as an extension 
exec 3>&2 2>/tmp/startlog.$$ 
# set options to turn on tracing and expansion of commands contained in the prompt 
setopt xtrace prompt_subst 

이것은 말 :

# turn off tracing 
unsetopt xtrace 
# restore stderr to the value saved in FD 3 
exec 2>&3 3>&- 

그리고 당신은 실행의 epoch_second.nanosecond 시간을 보여주는 자세한 로그를 얻어야한다 각 줄의. GNU date (및 OS 지원)은 나노초 출력이 필요합니다.

편집 :

추가 의견

편집 2 : 나중에 zsh을 4.3.12 이상을 사용한다면

것은, 당신이 date 명령을 사용하는 대신이 같은 PS4을 설정 할 수 있어야한다 :

zmodload zsh/datetime 
setopt promptsubst 
PS4='+$EPOCHREALTIME %N:%i> ' 

Linux 및 OS X 모두에서 나노초 정밀도를 제공해야합니다.

+0

원래 게시 한 내용에 매우 중요한 공간을 추가했습니다. –

+1

'setopt prompt_subst'도 확인하십시오. 그렇지 않으면'$ (date ..)'부분이 대체되지 않습니다. – blueyed

+0

위의 각 행이 정확히 무엇을하는지에 대해 더 많은 메모를 추가 할 수 있습니까? –

2

당신의 첫 번째 의심스러운 시점에서 당신의 타이머를 시작 할 수 ~/.zshrc (또는 시작 부분에) :

integer t0=$(date '+%s') # move this around 
... maybe something suspect ... 

# End of zshrc 
function { 
    local -i t1 startup 
    t1=$(date '+%s') 
    startup=$((t1 - t0)) 
    [[ $startup -gt 1 ]] && print "Hmm, poor shell startup time: $startup" 
} 
unset t0 

내가 너무 느린 시작을 참조 어느 경우 나 경고, 내가로에두고 영구 포장지.

더욱 정교한 측정을 위해 에는 zprof이라는 zsh 모듈이 있습니다. ~/.zshrc의 내용을 zmodload zsh/zprofzprof에 일시적으로 래핑하는 것만 큼 간단합니다. 이렇게하면 해석하기 쉬운 간단한 프로파일 링 테이블이 덤프됩니다.

자세한 내용은 zshmodules(1) 맨 페이지를 참조하십시오.

내가 (체크-변경 vcs_info, 항원, NVM, zsh을-마임 설치, 통역 버전 확인 등 rbenv 초기화) 나는 미리 알림로 SLOW 주석을 추가하고, 시도 특히 느린 것들을 찾을 수

대안을 찾으십시오. 슬로우 스타트 업은 많은 슬픔을 불러 일으킬 수 있으므로 zsh 패키지/프레임 워크를 피하는 경향이 있습니다. compinit은 내가 살 수있는 가장 느린 것이며 전체 시작 시간의 절반입니다.