Bagaimana saya bisa mempercepat startup terminal di Lion?
Saya tidak mengacu pada startup dari aplikasi Terminal, tetapi ke windows terminal startup, seperti ketika saya membuka tab baru.
Saya tidak punya apa-apa di file .bash_profile saya dan saya jalankan rm -rf /private/var/log/asl/*.asl
setiap 4 jam (yang menghapus file-file itu yang biasanya membuat terminal lambat).
Saat ini, ketika saya membuka tab baru, dibutuhkan 3-4 detik hingga saya dapat menjalankan sesuatu.
macos
terminal
command-line
Fernando
sumber
sumber
.bash_profile
(juga memeriksa~/.profile
dengan cara). Juga: perhatikan Anda dapat mulai mengetik saat bash sedang memuat, dan biasanya apa yang Anda ketik akan disalin ke command prompt setelah siap.Jawaban:
Jawaban singkat:
Masalahnya disebabkan oleh pencarian log sistem ASL (berpotensi) yang mahal. Untuk melihat ini dalam tindakan, jalankan
sudo fs_usage | grep 'asl.*login'
di jendela Terminal, lalu buka jendela Terminal baru.Untuk mengatasi masalah, konfigurasikan Terminal untuk meluncurkan shell non-standar:
sudo ln -s /bin/bash /usr/local/bin/bash
Catatan 1: Anda mungkin juga perlu menambahkan
bash
dan-bash
ke daftar proses di "Preferensi Terminal> Profil> Shell> Tanya sebelum menutup".Catatan 2:
/usr/local/bin
dapat ditulis dalam mode Rootless OS X 10.11 (El Capitan).Untuk memverifikasi perbaikan:
login -pfq username /usr/bin/bash
ataulogin -pfql username ...
Penting: Jika perintah login tidak menyertakan
-q
parameter, maka Anda belum memperbaiki masalahnya.Anda juga dapat menggunakan
sudo fs_usage | grep 'asl.*login'
untuk memverifikasi yang/var/log/asl
tidak diakses saat membuka jendela Terminal baru.Detail:
Ada sejumlah bug yang berperan di sini.
Penyebab kelambatan sebenarnya adalah
/usr/bin/login
, yang secara default akan menampilkan tanggal login terakhir Anda. Untuk mendapatkan tanggal login terakhir ini, ia mencari basis data ASL (Apple System Log) di/var/log/asl/
. File-file log ini bisa sangat terfragmentasi dan ini adalah file fragmentasi yang menyebabkan penundaan saat membuka jendela atau tab baru. (Bug 1)Satu-satunya cara untuk menekan pencarian ASL untuk login terakhir adalah dengan mengirimkan
-q
parameter/usr/bin/login
. The.hushlogin
File juga akan menekan "Terakhir masuk" layar, tetapi tidak menekan pencarian ASL mahal. (Bug 2)Terminal selalu digunakan
/usr/bin/login
untuk meluncurkan setiap jendela / shell baru. Tidak ada opsi untuk meluncurkan shell secara langsung juga tidak ada cara untuk secara langsung mengontrol parameter yang diteruskan ke/usr/bin/login
(Bug 3).Ternyata, Terminal akan meneruskan
-q
parameter/usr/bin/login
ketika dikonfigurasi untuk menggunakan shell non-standar . (Bug 4)The
-q
parameter apa yang kita butuhkan untuk menghindari masalah, maka symlink untuk/usr/local/bin/bash
.sumber
/bin/bash
berperilaku seolah-olah Shell Login Default dipilih. Perintah apa pun selain/bin/bash
akan bekerja dengan benar, jadi menggunakan / usr / bin / bash hanyalah solusi. Bug ini tidak ada di Snow Leopard.Apa yang saya butuhkan berubah dari shell login ke perintah
/bin/bash -il
di Preferensi iTerm > Profil> Umum> Perintah .Saya membutuhkan opsi
-l
( Buat bash bertindak seolah-olah itu telah dipanggil sebagai shell login ) ditambahkan untuk mengatur variabel lingkungan dari~/.bash_profile
sumber
.hushlogin
Buat file kosong di folder rumah Anda yang disebut
.hushlogin
; ini akan secara signifikan mengurangi waktu yang diperlukan untuk tab Terminal.app untuk muncul.Anda dapat membuat
.hushlogin
file di Terminal.app menggunakan perintah berikut:File akan segera berlaku.
Anda dapat mempelajari lebih lanjut tentang
.hushlogin
file dan proses login secara umum di manual login .Menenangkan proses masuk
Saat Anda membuat tab Terminal baru, Anda sedang melalui proses login. Proses ini melibatkan pengambilan berbagai informasi tentang sesi login Anda sebelumnya, pesan hari ini, dan menampilkan pesan sistem. Ini bisa menjadi sumber keterlambatan yang signifikan. Coba pisahkan pesan-pesan ini untuk melihat apakah penundaannya hilang.
sumber
opensnoop
. Lihat jawaban saya di bawah ini.OK saya punya kesimpulan yang mirip dengan Darren, meskipun mekanisme profiling sedikit berbeda (NB login lambat masih dapat terjadi di Yosemite).
Berikut adalah cara untuk mengetahui apa yang sebenarnya sedang berjalan saat Anda memulai jendela login baru, menggunakan perintah sampel profiler OS X.
Cari tahu perintah apa yang dijalankan oleh login normal
Anda akan melihat sesuatu seperti
login -pfl username /bin/bash -c exec -la bash /bin/bash
Buat nama file skrip
profile_login.sh
dengan konten berikut dengan menambahkan a-c ""
ke akhir perintah yang ditemukan untuk meminta bash segera kembali, dengan konten seperti ini:
Jadikan itu dapat dieksekusi
$ chmod u+x profile_login.sh
dan jalankan dengan menggunakan sudo (
sample
perintah mengharuskannya)$ sudo ./profile_login.sh
OK jadi silakan jalankan. Misalnya dengan menjalankan
purge
perintah terlebih dahulu. Di kotak saya, saya mendapat grafik output yang besar. Mencari "cabang-cabang bernomor terbesar" (biasanya di atas) saya melihat dua pelanggar terbesar berikut :Satu dari sesuatu yang disebut
pam_start
yang muncul untuk membuka gambar pam auth libdan itu terkadang diikuti oleh pelaku lain
getlastlogxbyname
Jadi pada dasarnya, ada dua pelaku. Salah satunya adalah
pam
(beberapa jenis sistem otentikasi) dan yang lainnya adalahasl
"deteksi login terbaru Anda". Begitu rupanya hanya menghapus Anda/private/var/log/asl/*.asl
file tidak cukup. Pemuatan pam jauh lebih mahal pada mesin saya, toh [SSD]. Jangan ragu untuk menjalankan skrip di atas dan melihat apakah sistem Anda sama. Menariknya, kode sumber untuk panggilan metode ini tampaknya juga tersedia online, misalnya openpam_dynamicJika saya mengikuti jawaban Darren, dan mengganti preferensi "shells open with" saya dengan sesuatu selain / bin / bash, saya kemudian melihat baris berikut yang digunakan untuk memulai tab terminal baru:
Jadi jika sekarang saya menggunakan
sample
trik yang sama pada perintah login barustacktrace yang jauh lebih kecil dihasilkan, pelaku terbesar adalah:
Saya pikir ini karena parameter login "-q" sekarang sedang digunakan. Rupanya parameter ini melompati memuat modul pam dan mencari waktu login terakhir (kedua pelaku). Menurut dokumen
login
perintah, menyentuh~/.hushlogin
file harus melakukan hal yang sama, tetapi ternyata ini tidak lagi berfungsi [setidaknya untuk saya dengan 10.10].Jadi, secara ringkas, menghapus /private/var/log/asl/*.asl tidak cukup (dalam percobaan saya, itu hanya menyumbang paling banyak 1/3 dari pelambatan yang sebenarnya, meskipun jika Anda punya file di sana, itu bisa menjelaskan untuk persentase yang lebih besar, saya yakin).
Pokoknya menggunakan skrip yang serupa, Anda harus dapat mengetahui apa yang menyebabkan mesin lokal Anda macet, dan melihat apakah perbaikan di atas berlaku untuk Anda. Jangan ragu untuk berkomentar di sini.
UPDATE: tampaknya
coresymbolication_load_image
masih bisa memakan waktu banyak, bahkan ketikalogin -pfql
dipanggil (mungkin beberapa modul otentikasi pam atau lainnya harus "dial out" ke server login pusat atau sejenisnya, jadi harus menunggu respons dari pihak ke-3 ). Jadi satu-satunya solusi nyata yang saya temukan adalah menggunakan iTerm2, dan ubah preferensi -> profil -> umum -> Perintah untuk/bin/bash
sebaliknya.sumber
Ini semua tentang menyelidiki penyebabnya. Anda dapat melihat apa yang sedang dilakukan saat proses dimulai dengan memasukkan
bash -x
yang akan mencetak proses memulai shell.Secara pribadi, saya hanya melihat penundaan antara aktivasi dan de-aktivasi aplikasi dan di tab pertama yang dibuat setelah periode aktivitas. Itu selalu membuat saya berpikir bahwa ini adalah tentang halaman memori yang dipindahkan.
sumber
Kurangi riwayat Anda menjadi sesuatu antara 4 dan 10 ribu baris dan mungkin mencoba berhenti dan membuang semua jendela yang disimpan. Saya telah melihat keduanya membuat perbedaan pada mesin yang lebih lambat - terutama yang tanpa SSD untuk penyimpanan.
sumber
Dalam kasus saya, setelah mencoba hal di atas pada mesin kerja saya tanpa hasil, saya menemukan bahwa pelakunya adalah Active Directory. Cara mengatasinya adalah masuk ke Direktori Utilitas dan mengedit pengaturan layanan AD (klik dua kali pada "Direktori Aktif") untuk mengaktifkan "Buat akun seluler saat masuk":
Ini tampaknya menyebabkan kredensial AD di-cache secara lokal, sehingga sistem tidak lagi harus pergi ke server setiap kali mencoba untuk memvalidasi kata sandi Anda.
Anda dapat membuka Utilitas Direktori dengan Spotlight atau melalui bagian "Opsi Masuk" dari Preferensi Sistem / Pengguna & Grup (pilih tombol "Edit ..." di sebelah "Server Akun Jaringan"):
sumber
Lari saja:
di terminal terpisah dan buka yang baru terbuka untuk melihat apa yang sedang dieksekusi selama waktu itu.
Jika tidak ada yang jelas, coba yang berikut ini:
Ini akan mencetak semua detail Anda yang terjadi pada waktu pemuatan tab.
sumber
Buka
/etc/profile
dan tambahkan barisPATH=""
sehingga terlihat seperti ini:sumber
Masalahnya bagi saya adalah server domain direktori aktif tidak valid.
Mengubahnya lalu me-reboot mac memperbaikinya.
sumber