คำสั่ง Cygwin จาก CMD ช้า จากการทุบตีนั้นรวดเร็ว

ฉันใช้คำสั่ง Cygwin จากพรอมต์ Windows CMD ของฉันเป็นเวลาหลายเดือนโดยไม่มีปัญหา ภายในไม่กี่วันที่ผ่านมา ทุกครั้งที่ฉันเรียกใช้คำสั่ง Cygwin (เช่น ls) คำสั่งจะใช้เวลาหลายวินาทีในการ "โหลด" ก่อนที่จะรันจริง ถ้าฉันลองใช้คำสั่งเดียวกันจากภายใน bash prompt มันจะทำงาน ("โหลด") ทันที

คำถามที่พบบ่อยของ Cygwin ระบุว่าไดรฟ์เครือข่ายใน PATH อาจทำให้เกิดปัญหา ดังนั้นฉันจึงลองวิธีเรียงสับเปลี่ยนบางอย่าง ของตัวแปร PATH และการเชื่อมต่อเครือข่ายของฉัน ด้านล่าง "เต็ม PATH" หมายถึงการตั้งค่าเส้นทางเดิมของฉัน "short PATH" หมายถึงเส้นทางที่มีเฉพาะไดเร็กทอรี Cygwin bin รายงานเวลาผ่านคำสั่ง time

ผลการจับเวลาสำหรับ ls

เชื่อมต่อกับเครือข่าย:

  • วิ่ง ls ภายใน bash: 0.124 วิ
  • วิ่ง ls ภายใน CMD (เต็ม PATH): 41.29 วิ
  • วิ่ง ls ภายใน CMD (สั้น PATH): 38.56 วิ

ตัดการเชื่อมต่อจากเครือข่าย:

  • วิ่ง ls ภายใน bash: 0.125 วิ
  • วิ่ง ls ภายใน CMD (เต็ม PATH): 0.17 วิ
  • วิ่ง ls ภายใน CMD (สั้น PATH): 0.19 วิ

ผลลัพธ์สำหรับ cygcheck

ฉันวิ่ง cygcheck -s และสังเกตเห็น:

Warning: There are multiple cygwin1.dlls on your path

แม้ว่านี่อาจเกิดจากการเรียกใช้ cygcheck จากภายในไดเร็กทอรี bin ของ Cygwin ฉันถอนการติดตั้งและติดตั้ง Cygwin ใหม่ทั้งหมดแล้ว แต่ยังคงพบปัญหาเดิมอยู่

ผลลัพธ์จาก netstat

ฉันรัน netstat -a -n ก่อนที่จะดำเนินการ ls ของ Cygwin และหลังการดำเนินการ (ในขณะที่มันหยุดทำงาน) ฉันทำสิ่งนี้หลายครั้งและพบหนึ่งบรรทัดจากการวิ่งแต่ละครั้งที่ปรากฏอย่างสม่ำเสมอระหว่างการดีเลย์:

  UDP    127.0.0.1:55030        *:*                    

หมายเลขพอร์ตเปลี่ยนจากการทดสอบเป็นการทดสอบ

strace ผลลัพธ์

ฉันรัน strace ของ Cygwin ด้วยคำสั่ง ls ความล่าช้าส่วนใหญ่จะใช้กับการโทร เช่น:

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

และ

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 แหล่งที่มา
comment
นี่คือคอมพิวเตอร์ที่ทำงาน ฉันไม่สามารถปิดการใช้งานโปรแกรมป้องกันไวรัสได้ (แม้แต่ในการทดสอบ)   -  person tbhartman    schedule 13.02.2015
comment
ฉันได้ตรวจสอบแล้วว่าไดเร็กทอรีทั้งหมดใน PATH ที่ไม่มีการเปลี่ยนแปลงของฉันนั้นมีอยู่จริงและอยู่ในเครื่อง   -  person tbhartman    schedule 13.02.2015
comment
ตอนนี้การตัดการเชื่อมต่อจากเครือข่ายทำให้ทุกอย่างเร็วขึ้นใช่ไหม ซึ่งไม่สอดคล้องกับผลลัพธ์ที่คุณโพสต์ในตอนแรก พิจารณาใช้ Process Monitor (หาได้จากเว็บไซต์ MS) เพื่อตรวจสอบว่ากระบวนการกำลังทำอะไรในช่วงความล่าช้าที่ยาวนาน   -  person Harry Johnston    schedule 14.02.2015
comment
@HarryJohnston ใช่ฉันต้องทำอะไรผิดในครั้งแรก นอกจากนี้ยังจะเกิดขึ้นเฉพาะเมื่อฉันเชื่อมต่อกับเครือข่ายของบริษัทของฉันเท่านั้น (เช่นจากที่บ้าน เมื่อเชื่อมต่อผ่าน VPN) บางทีมันอาจจะเกี่ยวข้องกับโปรแกรมป้องกันไวรัส ฉันจะลองใช้ Process Monitor   -  person tbhartman    schedule 14.02.2015
comment
เครือข่ายองค์กรส่วนใหญ่ที่มีอุโมงค์ VPN ไม่อนุญาต การแยกช่องสัญญาณ (เช่น เส้นทางเริ่มต้นจะถูกเปลี่ยน VPN ขององค์กร จุดสิ้นสุดเมื่อเชื่อมต่อทันเนล)   -  person Bill_Stewart    schedule 14.02.2015
comment
เช่นเดียวกับ Process Monitor ให้รัน netstat -a -n ในช่วงระยะเวลาหน่วง และค้นหาการเชื่อมต่อในสถานะ SYN_SENT ฉันพบอาการคล้ายกันในวงกว้างเมื่อซอฟต์แวร์พยายามตรวจสอบใบรับรอง SSL แต่การเข้าถึงเครือข่ายถูกบล็อกโดยไฟร์วอลล์ภายนอก (โดยทั่วไปหากคุณไม่มีการเชื่อมต่อเครือข่ายเลย ความพยายามจะล้มเหลวทันที เพื่อให้สอดคล้องกัน) ไม่จำเป็นต้องเป็น SSL การเข้าถึงเครือข่ายอื่นใดจะมีผลคล้ายกัน เช่น หาก Cygwin พยายามด้วยตนเอง อัปเดตหรืออะไรบางอย่าง   -  person Harry Johnston    schedule 15.02.2015
comment
การอภิปรายที่น่าสนใจ: cygwin.com/faq/faq.html#faq การใช้.startup-slow และ cygwin.com/ml/cygwin/ 2015-02/msg00195.html   -  person tbhartman    schedule 19.02.2015
comment
ปัญหานี้มีผลกับ Windows 7 เท่านั้นหรือกับ Window 10 ด้วย   -  person Hope    schedule 03.04.2019


คำตอบ (1)


ส่วนในคำถามที่พบบ่อยของ Cygwin กล่าวถึงเวลาเริ่มต้นที่ช้า Cygwin เพิ่งเปลี่ยนมาใช้การค้นหา Active Directory สำหรับการตรวจสอบสิทธิ์ แทนที่จะใช้ไฟล์แบบแฟลต การเปลี่ยนค่าเริ่มต้นใน /etc/nsswitch.conf จาก

passwd:   files db
group:    files db

to

passwd:   files
group:    files

ข้ามการค้นหา AD คำสั่ง Cygwin ของฉันกลับมารวดเร็วอีกครั้งแล้ว

person tbhartman    schedule 19.02.2015
comment
แปลก; ฉันสงสัยว่าทำไมจึงต้องค้นหาอะไรตั้งแต่แรก? คำสั่ง ls จะไม่แสดงกลุ่มและเจ้าของตามค่าเริ่มต้น IIRC - person Harry Johnston; 19.02.2015
comment
คุณเป็นผู้ช่วยชีวิต! ฉันจะโหวตสองครั้งถ้าทำได้ :-) - person ysap; 09.09.2016
comment
ฉันได้รับข้อผิดพลาดต่อไปนี้หลังจากแก้ไข nsswitch.conf: ข้อผิดพลาด: ไม่สามารถแยกกระบวนการลูก: ไม่มีเทอร์มินัลที่พร้อมใช้งาน (-1) - person Santosh Tiwari; 05.07.2017
comment
แทนที่จะทำการเปลี่ยนแปลงที่แนะนำในคำตอบนี้ ฉันไปที่ส่วนที่เชื่อมโยงใน cygwin แทนและทำตามคำแนะนำ (ใช้ตัวเลือกที่ 2) ตอนนี้มันเร็วขึ้นแล้ว :) - person Santosh Tiwari; 14.07.2017