Giải quyết với máy chủ ảo rất chậm trên Mac OS X Lion


26

Kể từ khi nâng cấp lên Mac OS X Lion (từ Snow Leopard), tôi nhận thấy rằng việc phân giải thành máy chủ ảo rất chậm (trong khoảng 3 giây). Tôi đã tìm thấy một số mẹo (ví dụ: không sử dụng TLD .local) có thể giải quyết vấn đề này, nhưng chúng không áp dụng cho thiết lập của tôi.

Thiết lập của tôi khá đơn giản: - Apache 2 (được vận chuyển với Lion) - đã kích hoạt PHP - đã thêm một vài máy chủ ảo - các gói Mail và SMTP Pear đã cài đặt

Tệp máy chủ của Apache trông như thế này:

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

Và tệp máy chủ ảo của Apache trông như thế này:

<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>

Thiết lập về cơ bản giống với thiết lập của tôi trên Snow Leopard, nhưng hiệu suất của Apache để giải quyết các máy chủ ảo thì khác biệt đáng kể. Tôi chạy Mac OS X Lion 10.7.2, nhưng sự cố đã xảy ra khi chạy 10.7.1.

Điều này có vẻ như là một vấn đề nhỏ, nhưng khi bạn truy cập vào máy chủ ảo vài trăm lần một ngày thì điều này sẽ gây ra sự lãng phí đáng kể thời gian như bạn có thể tưởng tượng.


Tôi không thấy bất cứ điều gì trong mô tả vấn đề đã loại trừ các vấn đề thông thường như tải hệ thống, sử dụng mạng, sử dụng bộ nhớ. Bạn nói giải quyết một máy chủ ảo là chậm. Từ đâu? Lệnh máy chủ, hoặc xem một trang được phục vụ bởi máy chủ? Nếu nó hoàn toàn liên quan đến DNS / máy chủ, bạn có thể đặt thời gian hiệu suất như thế này trên dòng lệnh: máy chủ thời gian snd.dev
labradort

Câu trả lời:


22

Thời gian chờ DNS dài hầu như luôn là dấu hiệu của các sự cố IPv6.

Bạn có cần kết nối IPv6 để apache?

Nếu không, tôi đề nghị thay đổi

<VirtualHost *:80>

vào

<VirtualHost 0.0.0.0:80>

Hoặc vô hiệu hóa kết nối IPv6 hoàn toàn.


3
+1: tra cứu DNS ipv6 là một vấn đề lớn trên OSX. Đối với một số lý do mơ hồ, đầu tiên OSX không tra cứu ipv6. Nếu hết thời gian (30 giây hoặc lâu hơn), nó sẽ tiếp tục với v4. OSX dường như không kiểm tra / etc / hosts vor v6 đầu tiên, nó hoạt động cho v4, nhưng chỉ sau khi v6 đã hết thời gian. Nếu bạn không thể vô hiệu hóa v6 tốt hơn, hãy đảm bảo rằng bạn có thiết lập v6 hoạt động hoàn toàn bao gồm DNS v6.
Tonny

Cảm ơn câu trả lời. Tôi không chắc đây có phải là vấn đề duy nhất đang đóng vai trò ở đây không, nhưng thời gian cần thiết để giải quyết một máy chủ ảo cục bộ đã giảm hầu hết thời gian.
Bart Jacobs

Việc tra cứu DNS của tôi mất khoảng 2-5 giây để giải quyết chứ không phải 30. Vì vậy, tôi không chắc vấn đề của mình là gì vì điều đó khó có thể là thời gian chờ. Bất kể, bây giờ là ngay lập tức kể từ khi thực hiện các thay đổi từ câu trả lời này.
Justin

22

Tôi cũng vừa mới chạy vào đây.

Điều này sẽ đặt IPv6 trong cấu hình Mạng thành Tắt ...

# 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

Nhưng .. thật không may, điều này không giải quyết được vấn đề giải quyết DNS cho tôi (có thể sau khi khởi động lại hệ thống). Điều thực sự hữu ích là thêm IP kiểu ipv6 vào / etc / hosts như thế này:

# 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 hiện hiển thị ngay lập tức

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

thay vì treo trong 5 giây trên Giải quyết dự án.local.


Lời khuyên của bạn là tất cả những gì tôi cần - chỉ cần thêm các mục IPv6 vào tệp máy chủ của tôi cùng với tiêu chuẩn 127.0.0.1và vấn đề đã được giải quyết hoàn toàn.
Kirk Woll

Yay! Điều này giúp trong OS X 10.8 (Mountain Lion). Sau khi nâng cấp trực tiếp từ 10.6 lên 10.8, tôi thấy việc tìm kiếm máy chủ lưu trữ cục bộ của mình quá lâu ... giống như chúng đã hết thời gian trước khi giải quyết. Điều này đã khắc phục vấn đề cho tôi. Cảm ơn!
Lothar_Grimpsenbacher

Tôi đã gặp vấn đề này gần đây và các mục IPv6 trong / etc / hosts đã khắc phục hoàn hảo.
Neil Albrock

cái này, nó hoạt động ngay bây giờ với tôi trên Max OS 10.10.1
ezmilhouse

10

Trên miền MacOSX Lion .local đã được "dành riêng" cho Multicast DNS Resolver (bonjour).

Điều này có nghĩa là việc tìm kiếm bất kỳ tên miền nào kết thúc bằng .local sẽ dẫn đến việc tra cứu mDNS (tối đa 5s) trước / etc / hosts.

Sửa lỗi:

  1. Thay đổi tên miền thử nghiệm của bạn thành một số TLD khác (nghĩa là .dev)
  2. Sử dụng công cụ dscl để thêm một ngoại lệ.

Làm việc cho tôi cũng vậy ... đã khiến tôi phát điên khi chỉ một vài trang dev của tôi làm điều này ... thấp và kìa ... tất cả những trang kết thúc bằng .local! điều này đã không bắt đầu xảy ra với tôi cho đến khi tôi nâng cấp lên High Sierra ... nhờ @artur
Mfoo

1
dsclchiến lược ngoại lệ là khá tiện lợi. @ artur-bodera liên kết của bạn đã hết hạn, nhưng họ đã lưu trữ blog cũ của họ trên github github.com/icebourg/itandme-archive/blob/master/posts/2011/08/
tựa

Cũng lưu ý rằng .local là một tiêu chuẩn được đề xuất với IETF: tools.ietf.org/html/rfc6762 Bạn cũng nên đăng ký một tên miền nếu bạn cần một tên miền "thử nghiệm", vì bạn có toàn quyền kiểm soát được cấu hình trong DNS. Tạo một tên miền rất có thể gây ra xung đột kỳ lạ với các phần khác của hệ thống tên miền (như mDNS trong trường hợp này.)
James Tikalsky

3

Hãy xem blog này để xem nó có giúp ích gì không, đặc biệt làm nổi bật Vấn đề # 2:

Rõ ràng, thiết bị đầu cuối và một số công cụ BSD Unix sử dụng chính xác /etc/resolv.conf và thứ tự đúng của / etc / hosts trước và sau đó là máy chủ DNS. Tuy nhiên, mọi thứ khác trên OS X Lion, bao gồm tất cả các Ứng dụng của bạn, đều làm ngược lại!


1

Nó hoạt động.

Tôi sử dụng giải pháp này

##
# 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

Cùng một lỗi trên Mavericks.

Đã giải quyết khi tôi đặt định nghĩa máy chủ lưu trữ cục bộ của mình vào đầu /etc/hosts, như thế này:

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

Tôi sẽ thử thay đổi:

::1             localhost 
fe80::1%lo0 localhost

đến

::1             localhost6 
fe80::1%lo0 localhost6

1
Thật không may, điều này không giải quyết được vấn đề. Bạn có thể cho biết những gì logic đằng sau đề nghị của bạn? Cảm ơn phản hồi của bạn mặc dù.
Bart Jacobs

Gần đây tôi đã chiến đấu một cách bất thường trong thời gian dài để nhận được phản hồi snmp từ các máy không chạy IPV6 nhưng có các mục như trong / etc / hosts. Bây giờ, điều mà tôi nghĩ đến là một máy chủ tên hết thời gian - mặc dù hơi kỳ lạ, bởi vì các máy chủ nên được ưu tiên hơn ràng buộc. (Tất nhiên là cấu hình như vậy).
Mẫu cuộc sống ngoài hành tinh

Thực sự rất kỳ quặc. Đôi khi, việc giải quyết với máy chủ là tức thời (như người ta mong đợi) và đối với người khác, việc này có thể mất vài giây.
Bart Jacobs
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.