Perintah Cygwin dari CMD lambat; dari bash cepat

Saya telah menggunakan perintah Cygwin dari prompt Windows CMD saya selama beberapa bulan tanpa masalah. Dalam beberapa hari terakhir, setiap kali saya memanggil perintah Cygwin (ls misalnya), perintah tersebut memerlukan beberapa detik untuk "memuat" sebelum benar-benar dijalankan. Jika saya mencoba perintah yang sama dari dalam bash prompt, perintah itu langsung berjalan ("memuat").

FAQ Cygwin menyebutkan bahwa drive jaringan di PATH dapat menyebabkan masalah, jadi saya telah mencoba beberapa permutasi variabel PATH saya dan konektivitas jaringan. Di bawah, "penuh PATH" berarti pengaturan jalur asli saya; "short PATH" berarti jalur hanya dengan direktori Cygwin bin. Waktu dilaporkan melalui perintah time.

Hasil pengaturan waktu untuk ls

Terhubung ke jaringan:

  • Jalankan ls dalam bash: 0,124 detik
  • Jalankan ls dalam CMD (penuh PATH): 41,29 detik
  • Jalankan ls dalam CMD (pendek PATH): 38,56 detik

Terputus dari jaringan:

  • Jalankan ls dalam bash: 0,125 detik
  • Jalankan ls dalam CMD (penuh PATH): 0,17 detik
  • Jalankan ls dalam CMD (pendek PATH): 0,19 detik

Hasil untuk cygcheck

Saya menjalankan cygcheck -s dan memperhatikan:

Warning: There are multiple cygwin1.dlls on your path

meskipun ini mungkin karena menjalankan cygcheck dari dalam direktori bin Cygwin. Saya telah menghapus sepenuhnya dan menginstal ulang Cygwin dan masih melihat masalah yang sama.

Hasil dari netstat

Saya menjalankan netstat -a -n sebelum mengeksekusi ls Cygwin dan setelah eksekusi (saat terhenti). Saya melakukan ini beberapa kali dan menemukan satu baris dari setiap proses yang muncul secara konsisten selama penundaan:

  UDP    127.0.0.1:55030        *:*                    

Nomor port berubah dari pengujian ke pengujian.

strace hasil

Saya menjalankan strace Cygwin pada perintah ls. Sebagian besar penundaan dihabiskan untuk panggilan seperti:

11685  886560 [main] ls 10020 pwdgrp::fetch_account_from_windows: line: <xxxx>

Dan

12684  899244 [main] ls 10020 cyg_ldap::fetch_ad_account: No entry for (objectSid=\00\00\00\00) in xxxx DC=xxxx,DC=xxxx,DC=xxxx

person tbhartman    schedule 13.02.2015    source sumber
comment
Ini adalah komputer kerja; Saya tidak bisa menonaktifkan antivirus (bahkan untuk menguji).   -  person tbhartman    schedule 13.02.2015
comment
Saya telah memverifikasi bahwa semua direktori di PATH saya yang tidak diubah ada dan bersifat lokal.   -  person tbhartman    schedule 13.02.2015
comment
Jadi sekarang memutuskan sambungan dari jaringan membuat segalanya lebih cepat? Itu tidak konsisten dengan hasil yang Anda posting sebelumnya. Pertimbangkan untuk menggunakan Process Monitor (tersedia di situs web MS) untuk memeriksa proses apa yang dilakukan selama penundaan yang lama.   -  person Harry Johnston    schedule 14.02.2015
comment
@HarryJohnston, ya, saya pasti melakukan kesalahan pada kali pertama. Itu juga hanya ketika saya terhubung ke jaringan perusahaan saya (jadi dari rumah, ketika terhubung melalui VPN). Mungkin itu terkait dengan antivirus. Saya akan mencoba Monitor Proses.   -  person tbhartman    schedule 14.02.2015
comment
Sebagian besar jaringan perusahaan yang menyediakan terowongan VPN tidak mengizinkan penerusan terpisah (yaitu, rute default VPN perusahaan diubah titik akhir ketika terowongan terhubung).   -  person Bill_Stewart    schedule 14.02.2015
comment
Selain Process Monitor, jalankan netstat -a -n selama periode penundaan dan cari koneksi dalam status SYN_SENT. Saya telah melihat gejala yang mirip dengan ini ketika perangkat lunak mencoba memvalidasi sertifikat SSL tetapi akses jaringan diblokir oleh firewall eksternal. (Biasanya jika Anda tidak memiliki koneksi jaringan sama sekali, upaya tersebut akan langsung gagal, sehingga akan konsisten.) Tidak harus SSL, akses jaringan lain akan memiliki efek serupa, misalnya, jika Cygwin mencoba melakukan self- pembaruan atau sesuatu.   -  person Harry Johnston    schedule 15.02.2015
comment
Beberapa diskusi menarik: cygwin.com/faq/faq.html#faq. menggunakan.startup-slow dan cygwin.com/ml/cygwin/ 02-2015/msg00195.html   -  person tbhartman    schedule 19.02.2015
comment
Apakah masalah ini hanya berlaku pada Windows 7 atau Windows 10 juga?   -  person Hope    schedule 03.04.2019


Jawaban (1)


Bagian di FAQ Cygwin membahas waktu startup yang lambat. Cygwin baru-baru ini berubah menggunakan pencarian Direktori Aktif untuk otentikasi, daripada menggunakan file datar. Mengubah default di /etc/nsswitch.conf dari

passwd:   files db
group:    files db

to

passwd:   files
group:    files

melewatkan pencarian AD. Perintah Cygwin saya sekarang kembali cepat.

person tbhartman    schedule 19.02.2015
comment
Aneh; Saya bertanya-tanya mengapa perlu mencari sesuatu terlebih dahulu? Perintah ls tidak menampilkan grup dan pemilik secara default, IIRC. - person Harry Johnston; 19.02.2015
comment
Anda adalah penyelamat hidup! Saya akan memberi suara positif dua kali jika saya bisa :-) - person ysap; 09.09.2016
comment
Saya mendapatkan kesalahan berikut setelah memodifikasi nsswitch.conf: Kesalahan: Tidak dapat melakukan proses anak: Tidak ada terminal yang tersedia (-1). - person Santosh Tiwari; 05.07.2017
comment
Alih-alih membuat perubahan yang disarankan dalam jawaban ini, saya malah pergi ke bagian tertaut di cygwin dan mengikuti instruksi (menggunakan opsi 2). Sekarang lebih cepat. :) - person Santosh Tiwari; 14.07.2017