Bagaimana cara mempercepat Terminal baru tab waktu loading?

Bagaimana saya dapat mempercepat startup terminal di Singa?

I'm tidak mengacu pada startup dari aplikasi Terminal, tetapi untuk startup terminal windows, seperti ketika saya membuka tab baru.

Saya don't memiliki apa-apa pada saya .bash_profile file dan aku berlari rm -rf /private/var/log/asl/*.asl setiap 4 jam (yang jelas file-file yang biasanya membuat terminal lambat ).

Saat ini, ketika saya membuka tab baru, itu membutuhkan waktu 3-4 detik sampai aku bisa menjalankan sesuatu.

Mengomentari pertanyaan (4)

Jawaban Singkat:

Masalah ini disebabkan oleh (berpotensi) mahal ASL sistem log lookup. Untuk melihat ini dalam tindakan, menjalankan sudo fs_usage | grep 'dpl.*login' di jendela Terminal, kemudian buka jendela Terminal baru.

Untuk memecahkan masalah ini, mengkonfigurasi Terminal untuk meluncurkan non-standar shell:

  1. Membuat symlink untuk pilihan anda shell. E. g.: sudo ln-s /bin/bash /usr/local/bin/bash
  2. Buka Terminal Preferences dan pilih "Umum" tab.
  3. Pilih "Kerang terbuka dengan: Perintah" dan memasukkan symlink anda buat di langkah 1. E. g. "/usr/local/bin/bash".

Catatan 1: Anda juga mungkin perlu untuk menambahkan bash dan -bash untuk proses daftar di "Terminal Preferensi > Profil > Shell > Meminta sebelum penutupan".

Catatan 2: /usr/local/bin ditulis di OS X 10.11 (El Capitan) mode Tanpa akar.

Untuk memverifikasi perbaikan:

  • Buka jendela Terminal baru.
  • "Terakhir Login:" harus tidak akan ditampilkan di bagian atas
  • Buka inspektur (Command + I) dan pilih tab Info.
  • Perintah harus membaca login-pfq username /usr/bin/bash atau login-pfql username ...

Penting: Jika login perintah tidak termasuk -q parameter, maka anda tidak memperbaiki masalah.

Anda juga dapat menggunakan sudo fs_usage | grep 'dpl.*login' untuk memverifikasi bahwa /var/log/asl tidak diakses ketika membuka jendela Terminal baru.

Rincian:

Ada sejumlah bug yang bermain di sini.

Sebenarnya penyebab kelambatan /usr/bin/login, yang secara default akan menampilkan tanggal terakhir anda login. Untuk mendapatkan ini tanggal login terakhir, ini pencarian ASL (Apple Log Sistem) database di /var/log/asl/. File log ini dapat menjadi sangat terfragmentasi dan's file ini fragmentasi yang menyebabkan delay ketika membuka jendela baru atau tab. (Bug 1)

Satu-satunya cara untuk menekan ASL pencarian untuk login terakhir adalah untuk lulus -q parameter /usr/bin/login. The .hushlogin file juga akan menekan "Login Terakhir" display, tetapi tidak menekan mahal ASL pencarian. (Bug 2)

Terminal selalu menggunakan /usr/bin/login untuk memulai setiap jendela baru/shell. Tidak ada pilihan untuk meluncurkan shell langsung juga tidak ada cara untuk secara langsung mengontrol parameter yang dilewatkan ke /usr/bin/login (Bug 3).

Ternyata, Terminal akan lulus -q parameter /usr/bin/login ketika dikonfigurasi untuk menggunakan non-standard shell. (Bug 4)

The -q parameter adalah apa yang kita butuhkan untuk menghindari masalah, oleh karena itu symlink ke /usr/local/bin/bash.

Komentar (13)

Apa yang saya butuhkan adalah perubahan dari sebuah login shell dengan perintah /bin/bash -il di iTerm's Preferensi > Profil > Umum > Perintah.

Aku butuh opsi -l (Membuat bash bertindak seolah-olah telah dipanggil sebagai sebuah login shell) ditambahkan untuk mengatur variabel lingkungan dari ~/.bash_profile

Komentar (3)

.hushlogin

Buat sebuah file kosong di home folder anda, yang disebut .hushlogin; hal ini akan secara signifikan mengurangi waktu yang dibutuhkan untuk Terminal.aplikasi tab untuk muncul.

Anda dapat membuat .hushlogin file di Terminal.aplikasi menggunakan perintah berikut:

touch ~/.hushlogin

File akan segera berlaku.

Anda dapat mempelajari lebih lanjut tentang .hushlogin file dan proses login secara umum di login manual.

Quietening proses login

Ketika anda membuat Terminal baru tab, anda akan melalui proses login. Proses ini melibatkan mengambil berbagai informasi tentang anda sebelumnya sesi login, pesan hari ini, dan sistem menampilkan pesan. Hal ini dapat menjadi sumber dari penundaan yang signifikan. Mencoba hushing pesan-pesan ini untuk melihat jika penundaan menghilang.

Komentar (2)

OK saya memiliki kesimpulan yang sama Darren, meskipun sedikit berbeda mekanisme profiling (NB lambat login masih bisa terjadi di Yosemite).

Berikut ini's cara untuk memberitahu apa adalah benar-benar berjalan ketika anda mulai login window baru, menggunakan OS X sample profiler perintah.

Cari tahu apa perintah login normal executs

$ ps -ef | grep login

Anda'll melihat sesuatu seperti login-pfl username /bin/bash -c exec -la bash /bin/bash

Membuat script file name profile_login.sh dengan isi sebagai berikut dengan menambahkan

-c ","

untuk akhir ditemukan perintah untuk meminta bash segera kembali, dengan isi seperti ini:

login -pfl username /bin/bash -c exec -la bash /bin/bash -c "" &
sudo sample $! -mayDie # sample the above command

Membuatnya executable

$ chmod u+x profile_login.sh

dan menjalankannya dengan menggunakan sudo (contoh perintah yang memerlukan)

$ sudo ./profile_login.sh

OK jadi pergi ke depan dan menjalankan hal itu. Misalnya dengan melakukan pembersihan perintah pertama. Pada kotak saya, saya punya besar output grafik. Mencari "terbesar nomor cabang" (biasanya di bagian atas) saya melihat dua berikut terbesar pelanggar:

Salah satu dari sesuatu yang disebut pam_start yang muncul untuk membuka pam auth lib gambar

+   ! 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]

dan yang kadang-kadang diikuti oleh yang lain pelaku 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]

Jadi pada dasarnya, ada dua pelaku. Salah satunya adalah pam (beberapa jenis sistem otentikasi) dan yang lain itu asl "mendeteksi terbaru anda login" hal. Jadi rupanya hanya menghapus /private/var/log/asl/*.asl file tidak cukup. Pam loading jauh lebih mahal di mesin saya, pokoknya [SSD]. Merasa bebas untuk menjalankan script di atas dan melihat apakah sistem yang sama. Menariknya, kode sumber untuk metode ini panggilan sepertinya juga akan tersedia secara online, misalnya openpam_dynamic

Jika saya mengikuti Darren's jawaban, dan menggantikan saya "kerang terbuka dengan" preferensi untuk sesuatu yang lain dari /bin/bash, saya kemudian melihat baris berikut yang digunakan untuk start new tab terminal:

 $ ps -ef | grep login
  ... login -pfql packrd /bin/bash -c exec -la bash /usr/bin/bash

Jadi jika sekarang saya sama-sama menggunakan sampel trik baru login perintah

login -pfql username /bin/bash -c exec -la bash /usr/bin/bash -c "" &
sudo sample $! -mayDie

jauh lebih kecil stacktrace dihasilkan, pelaku terbesar menjadi:

+         8 pam_end  (in libpam.2.dylib) + 190  [0x7fff97294ebb]
+             !           6 coresymbolication_unload_image(CSCppDyldSharedMemoryPage*, ImageLoader const*)  (in dyld) + 143  [0x7fff6e0f634f]

Saya pikir ini adalah karena login "-q" parameter ini sekarang sedang digunakan. Rupanya parameter ini melompat kedua memuat modul pam dan mencari login terakhir kali (kedua pelaku). Menurut dokumen dari login perintah, menyentuh ~/.hushlogin file harus melakukan hal yang sama, tapi rupanya ini tidak lagi bekerja [setidaknya bagi saya dengan 10.10].

Jadi, dalam ringkasan, menghapus /private/var/log/asl/*.asl tidak cukup (dalam percobaan saya, itu hanya menyumbang paling banyak 1/3 dari yang sebenarnya perlambatan, meskipun jika anda memiliki adat istiadat file yang ada itu bisa menjelaskan persentase yang lebih besar saya'm yakin).

Lagi pula menggunakan script serupa, anda harus dapat memberitahu apa yang's menyebabkan komputer lokal anda ke rawa, dan melihat jika di atas memperbaiki berlaku untuk anda. Merasa bebas untuk komentar di sini.

UPDATE: tampaknya bahwa coresymbolication_load_image masih dapat mengambil banyak waktu, bahkan ketika login-pfql dipanggil (mungkin beberapa modul pam authentication atau lainnya harus "dial out" ke central login server atau aneh, sehingga harus menunggu respon dari pihak ke-3). Jadi satu-satunya nyata solusi yang saya temukan adalah dengan menggunakan iTerm2, dan mengubah preferensi -> profil -> umum -> Perintah untuk /bin/bash sebagai gantinya.

Komentar (2)

Ini adalah semua tentang menyelidiki penyebabnya. Anda dapat melihat apa yang's sedang dilakukan saat proses dimulai dengan penginputan bash -x yang akan mencetak proses dari awal sampai shell.

Secara pribadi, saya hanya pemberitahuan penundaan antara aktivasi dan de-aktivasi aplikasi dan di tab pertama yang dibuat setelah periode aktivitas. Itu selalu membuat saya berpikir bahwa itu adalah tentang halaman memori yang dipindahkan.

Komentar (0)

Dalam kasus saya, setelah mencoba atas pada mesin bekerja tanpa hasil, saya menemukan bahwa pelakunya adalah Active Directory. Perbaikan itu untuk pergi ke Direktori Utilitas dan menyunting pengaturan layanan (double-klik pada "Active Directory") untuk mengaktifkan "Buat akun ponsel di login":

Ini rupanya penyebab IKLAN mandat untuk menjadi cache lokal, sehingga sistem tidak lagi memiliki untuk pergi ke server setiap kali mencoba untuk memvalidasi password anda.

Anda bisa mendapatkan ke Direktori Utilitas dengan Sorotan atau melalui "Pilihan Login" bagian dari System Preferences / Pengguna & Kelompok (pilih "Edit..." tombol di samping untuk "Akun Jaringan Server"):

Komentar (0)

Mengurangi sejarah anda untuk sesuatu antara 4 dan 10 ribu baris dan mungkin mencoba berhenti dan membuang semua diselamatkan windows. Saya telah melihat kedua membuat perbedaan lebih lambat pada mesin - terutama orang-orang tanpa SSD untuk penyimpanan.

Komentar (0)

Masalahnya bagi saya adalah bahwa domain active directory server tidak valid.

Perubahan itu kemudian reboot mac tetap itu.

Komentar (0)

Hanya menjalankan:

sudo creatbyproc.d
sudo newproc.d

di terminal yang terpisah dan terbuka baru terbuka untuk melihat apa yang sedang dijalankan selama waktu itu.

Jika tidak ada yang jelas, coba yang berikut ini:

sudo dtruss -an Terminal

Ini akan menampilkan semua rincian yang terjadi di tab waktu loading.

Komentar (0)

Open /etc/profile dan tambahkan baris PATH="" sehingga terlihat seperti ini:

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