Skip to Content

Debug zsh startup time

Posted on

Dạo gần đây mỗi lần mở terminal lên, zsh của mình khởi động khá chậm. Thực ra là chỉ delay tầm 1, 2s thôi, nhưng việc nhìn màn hình nó đơ ra, mất 1 lúc mới load xong thì cũng hơi khó chịu =)) Nên mình thử google tìm cách debug xem thử xem tại sao nó lại bị chậm thế =]]

Dưới đây là các bước để thử debug xem zsh shell đang bị chậm ở đâu :D

Step 1. Tính thời gian khởi động

Trước hết, thử chạy câu lệnh này xem thời gian khởi động zsh shell của bạn là bao lâu?

time zsh -i -c exit

Step 2. Profiling - Đi tìm xem đâu là process chiếm nhiều thời gian nhất

Đầu tiên, bạn thêm đoạn zmodload zsh/zprof vào đầu file ~/.zshrczprof vào cuối file. Mục đích là để load zprof mod và hiển thị xem khi shell khởi động, nó đang load những tiến trình nào.

Sau đó, bạn thử mở 1 tab terminal mới, kết quả profiling sẽ hiện ra :D

num  calls                time                       self            name
-----------------------------------------------------------------------------------
 1)    1          74.05    74.05   63.23%     74.05    74.05   63.23%  a command
 2) ....

Command nào chạy mất nhiều thời gian nhất sẽ được show lên hàng đầu :v

Trong trường hợp của mình là compinit

Step 3: Faster compinit

Sau khi google thử thì phát hiện ra là process compinit là 1 function được kết hợp bởi: completioninitialize =))

Function này sẽ load các file trong ~/.zcompdump files trong máy bạn. Các file này sẽ được sinh tự động. Khi bị sinh quá nhiều/ quá nặng, nó sẽ delay quá trình load file.

=> Mình xoá luôn đi =))) Bạn có thể add thêm đoạn script: rm -rf ~/.zcompdump* vào đầu của file zshrc cũng okie :v

Sau đó, khởi động lại terminal. Tốc độ được cải thiện đáng kể.

Step 4. Cleanups

Mình cũng nên dò lại 1 lượt các đoạn load không cần thiết trong file ~/.zshrc. Ví dụ như các plugin không dùng đến, các đoạn init chẳng hạn.

References

comments powered by Disqus