การแก้ไขเป็นโฮสต์เสมือนช้ามากใน Mac OS X Lion


26

ตั้งแต่อัพเกรดเป็น Mac OS X Lion (จาก Snow Leopard) ฉันสังเกตว่าการแก้ไขไปยังโฮสต์เสมือนนั้นช้ามาก (ประมาณ 3 วินาที) ฉันพบเคล็ดลับจำนวนหนึ่ง (เช่นไม่ได้ใช้. local TLD) ที่อาจแก้ไขปัญหานี้ได้ แต่ไม่ได้ใช้กับการตั้งค่าของฉัน

การตั้งค่าของฉันค่อนข้างง่าย: - Apache 2 (มาพร้อมกับ Lion) - เปิดใช้งาน PHP - เพิ่มโฮสต์เสมือนสองสาม - แพ็คเกจ Mail และ SMTP Pear ที่ติดตั้ง

ไฟล์โฮสต์ของ Apache มีลักษณะดังนี้:

127.0.0.1   localhost
255.255.255.255 broadcasthost
::1             localhost 
fe80::1%lo0 localhost
127.0.0.1   tbi.dev
127.0.0.1   www.tbi.dev
127.0.0.1   test1.tbi.dev
127.0.0.1   test2.tbi.dev
127.0.0.1   psa.dev
127.0.0.1   snd.dev

และไฟล์โฮสต์เสมือนของ Apache มีลักษณะดังนี้:

<VirtualHost *:80>
    DocumentRoot "/Users/Bart/Sites/tbi"
    ServerName tbi.dev
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/Users/Bart/Sites/tbi"
    ServerName tbi.dev
    ServerAlias *.tbi.dev www.tbi.dev
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/Users/Bart/Sites/psa"
    ServerName psa.dev
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/Users/Bart/Sites/sandbox"
    ServerName snd.dev
</VirtualHost>

การตั้งค่านั้นเหมือนกับการตั้งค่าของฉันบน Snow Leopard แต่ประสิทธิภาพของ Apache สำหรับการแก้ไขโฮสต์เสมือนนั้นแตกต่างกันอย่างมาก ฉันเรียกใช้ Mac OS X Lion 10.7.2 แต่ปัญหานี้มีอยู่แล้วเมื่อใช้งาน 10.7.1

สิ่งนี้อาจดูเหมือนเป็นปัญหาเล็ก ๆ แต่เมื่อคุณเข้าถึงโฮสต์เสมือนสองสามร้อยครั้งต่อวันสิ่งนี้จะทำให้คุณเสียเวลามากพอที่จะจินตนาการได้


ฉันไม่เห็นอะไรเลยในคำอธิบายปัญหาซึ่งตัดปัญหาทั่วไปเช่นการโหลดระบบการใช้เครือข่ายการใช้หน่วยความจำ คุณบอกว่าการแก้ไขโฮสต์เสมือนช้า จากที่ไหน คำสั่งโฮสต์หรือดูหน้าที่ให้บริการโดยเซิร์ฟเวอร์? ถ้าเกี่ยวข้องกับ DNS / โฮสต์อย่างหมดจดคุณสามารถกำหนดเวลาประสิทธิภาพการทำงานได้ในบรรทัดคำสั่ง: time host snd.dev
labradort

คำตอบ:


22

การหมดเวลา DNS ที่ยาวนานมักเป็นสัญญาณของปัญหา IPv6

คุณต้องการเชื่อมต่อ IPv6 กับ apache หรือไม่

ถ้าไม่ฉันขอแนะนำให้เปลี่ยน

<VirtualHost *:80>

เข้าไป

<VirtualHost 0.0.0.0:80>

หรือปิดใช้งานการเชื่อมต่อ IPv6 โดยสิ้นเชิง


3
+1: การค้นหา DNS ipv6 เป็นปัญหาสำคัญของ OSX ด้วยเหตุผลบางอย่างที่ไม่ชัดเจน OSX จะทำการค้นหา ipv6 เป็นครั้งแรก หากเวลานั้นหมดไป (30 วินาทีหรือมากกว่านั้น) มันจะดำเนินการต่อด้วย v4 OSX ดูเหมือนจะไม่ตรวจสอบ / etc / hosts ก่อน vor v6 แต่ใช้กับ v4 แต่หลังจาก v6 หมดเวลาเท่านั้น หากคุณไม่สามารถปิดการใช้งาน v6 ได้ดียิ่งขึ้นตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง v6 ที่ทำงานได้อย่างสมบูรณ์รวมถึง v6 DNS
Tonny

ขอบคุณสำหรับคำตอบ. ฉันไม่แน่ใจว่านี่เป็นปัญหาเดียวที่เล่นบทบาทที่นี่ แต่เวลาที่ใช้ในการแก้ปัญหาโฮสต์เสมือนในท้องถิ่นได้ลดลงเกือบตลอดเวลา
Bart Jacobs

การค้นหา DNS ของฉันใช้เวลาประมาณ 2-5 วินาทีในการแก้ไขไม่ใช่ 30 ดังนั้นฉันไม่แน่ใจว่าปัญหาของฉันคืออะไรเนื่องจากไม่น่าจะหมดเวลา ไม่ว่าตอนนี้จะเป็นทันทีตั้งแต่ทำการเปลี่ยนแปลงจากคำตอบนี้
Justin

22

ฉันเพิ่งพบเจอสิ่งนี้เช่นกัน

สิ่งนี้จะตั้งค่า IPv6 ในการกำหนดค่าเครือข่ายเป็นปิด ...

# list all network interfaces to get their names
networksetup -listallnetworkservices
# disable the one you want, in my case it's WiFi
networksetup -setv6off Wi-Fi

แต่ .. น่าเสียดายที่นี่ไม่ได้แก้ปัญหาการแก้ไข DNS สำหรับฉัน (อาจหลังจากรีสตาร์ทระบบ) สิ่งที่ช่วยได้จริงๆคือการเพิ่ม IPs สไตล์ IPv6 ให้กับ / etc / hosts เช่นนี้:

# my original /etc/hosts ...
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1             localhost 
fe80::1%lo0 localhost

127.0.0.1 project.local

# adding this solved resolving:
fe80::1%lo0 project.local

wget http: //project.localตอนนี้จะแสดงทันที

Resolving project.local... 127.0.0.1
Connecting to project.local|127.0.0.1|:80... connected.

แทนที่จะแขวนเป็นเวลา 5 วินาทีใน Resolving project.local


คำแนะนำของคุณคือสิ่งที่ฉันต้องการเพียงแค่เพิ่มรายการ IPv6 ไปยังไฟล์โฮสต์ของฉันพร้อมกับมาตรฐาน127.0.0.1และปัญหาได้รับการแก้ไขอย่างสมบูรณ์
Kirk Woll

เย้! สิ่งนี้จะช่วยใน OS X 10.8 (Mountain Lion) หลังจากอัปเกรดจาก 10.6 โดยตรงเป็น 10.8 ฉันพบว่าการค้นหาโฮสต์ในพื้นที่ของฉันเกินไปตลอดกาล ... เหมือนพวกเขาหมดเวลาก่อนที่จะแก้ไข ปัญหานี้ได้รับการแก้ไขสำหรับฉัน ขอบคุณ!
Lothar_Grimpsenbacher

ฉันพบปัญหานี้เมื่อเร็ว ๆ นี้และรายการ IPv6 ใน / etc / hosts แก้ไขได้อย่างสมบูรณ์
Neil Albrock

นี่ใช้ได้สำหรับฉันใน Max OS 10.10.1
ezmilhouse

10

ในโดเมนMacOSX Lion .localถูก "สงวน" สำหรับ Multicast DNS Resolver (bonjour)

ซึ่งหมายความว่าการค้นหาโดเมนใด ๆ ที่ลงท้ายด้วย. local จะส่งผลให้การค้นหา mDNS (สูงสุด 5 วินาที) ก่อน / etc / hosts

แก้ไข:

  1. เปลี่ยนโดเมนทดสอบของคุณเป็น TLD อื่น ๆ (เช่น.dev)
  2. ใช้เครื่องมือ dsclเพื่อเพิ่มข้อยกเว้น

ทำงานให้ฉันด้วยเช่นกัน ... ทำให้ฉันเป็นบ้าว่ามีเพียงไม่กี่แห่งในไซต์ dev ของฉันที่ทำสิ่งนี้ ... ต่ำและดู ... ทุกคนที่ลงท้ายด้วย. local! สิ่งนี้ไม่ได้เกิดขึ้นกับฉันจนกว่าฉันจะอัพเกรดเป็น High Sierra ... ขอบคุณ @artur
Mfoo

1
dsclกลยุทธ์ข้อยกเว้นค่อนข้างดี @ artur-bodera ลิงก์ของคุณหมดอายุแล้ว แต่พวกเขาก็เก็บบล็อกเก่าของพวกเขาใน github github.com/icebourg/itandme-archive/blob/master/posts/2011/08/…
lkraav

โปรดทราบว่า. local เป็นมาตรฐานที่เสนอกับ IETF: tools.ietf.org/html/rfc6762นอกจากนี้ยังเป็นความคิดที่ดีที่จะลงทะเบียนชื่อโดเมนหากคุณต้องการโดเมน "test" เนื่องจากคุณได้รับการควบคุมอย่างเต็มที่ กำหนดค่าใน DNS การสร้างชื่อโดเมนมีความเป็นไปได้สูงที่จะทำให้เกิดข้อขัดแย้งแปลก ๆ กับส่วนอื่น ๆ ของระบบโดเมน (เช่น mDNS ในกรณีนี้)
James Tikalsky

3

ลองดูที่บล็อกนี้เพื่อดูว่ามีประโยชน์หรือไม่โดยเน้นปัญหาที่ # 2:

เห็นได้ชัดว่าเทอร์มินัลและเครื่องมือ BSD Unix บางอย่างใช้อย่างถูกต้อง /etc/resolv.conf และลำดับที่ถูกต้องของ / etc / hosts ก่อนและจากนั้นเซิร์ฟเวอร์ DNS อย่างไรก็ตามทุกสิ่งทุกอย่างใน OS X Lion รวมถึงแอพพลิเคชั่นทั้งหมดของคุณทำได้เลย!


1

มันได้ผล.

ฉันใช้วิธีนี้

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1   localhost
255.255.255.255 broadcasthost
::1             localhost6
fe80::1%lo0 localhost

1

ข้อผิดพลาดเดียวกันกับ Mavericks

แก้ไขเมื่อฉันใส่คำนิยามโฮสต์ในพื้นที่ของฉันไปที่จุดเริ่มต้นของ/etc/hostsเช่นนี้:

127.0.0.1 localhost project1.dev project2.dev
127.0.0.1 project3.dev project4.dev
255.255.255.255 broadcasthost
::1             localhost
fe80::1%lo0     localhost

0

ฉันจะลองเปลี่ยน:

::1             localhost 
fe80::1%lo0 localhost

ไปยัง

::1             localhost6 
fe80::1%lo0 localhost6

1
น่าเสียดายที่นี่ไม่ได้แก้ปัญหา คุณช่วยบอกได้ไหมว่าเหตุผลอะไรที่อยู่เบื้องหลังข้อเสนอแนะ ขอบคุณสำหรับการตอบกลับของคุณ
Bart Jacobs

ฉันเพิ่งต่อสู้นานเกินไปสำหรับการตอบสนอง snmp จากเครื่องที่ไม่ได้ใช้ IPV6 แต่มีรายการที่ชอบใน / etc / hosts ตอนนี้สิ่งอื่น ๆ ที่อยู่ในใจคือเนมเซิร์ฟเวอร์ไทม์เอาท์ - บิตแปลกเพราะโฮสต์ควรมีความสำคัญมากกว่าผูก (แน่นอนว่าแน่นอน)
แบบฟอร์มชีวิตมนุษย์ต่างดาว

แปลกมากอย่างแน่นอน ในบางครั้งการแก้ไขไปยังโฮสต์นั้นเป็นไปอย่างรวดเร็ว (ตามที่คาดไว้) และในบางกรณีอาจใช้เวลาหลายวินาที
Bart Jacobs
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.