Làm cách nào để loại bỏ việc phân giải / tải localhost / virtualhost chậm (độ trễ 2-3 giây) trên Mac OS X Lion?


97

Kể từ khi thiết lập môi trường phát triển của tôi trên Mac OS X Lion (chiếc macbook air hoàn toàn mới được mua vào tháng 1 năm 2012), tôi đã nhận thấy rằng việc phân giải với máy chủ ảo rất chậm (khoảng 3 giây) trong lần đầu tiên nhưng sau đó thì nhanh miễn là Tôi tiếp tục tải nó thường xuyên.

Nếu tôi để nguyên nó trong vài phút và sau đó tải lại, lần tải lại đầu tiên (lại) rất chậm; có vẻ như một cái gì đó đang được lưu vào bộ nhớ cache.

Như có thể thấy bên dưới, tôi không sử dụng .local TLD.

Thiết lập của tôi: Apache 2 - MySQL - PHP được cài đặt và kích hoạt - đã thêm một vài máy chủ ảo mà một trong số đó tôi đã tạo cho localhost

/ Etc / hosts của tôi:

127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost
fe80::1%lo0     localhost
127.0.0.1       myproject.dev
::1             myproject.dev
fe80::1%lo0     myproject.dev

Thiết lập máy chủ ảo của tôi trong username.conf:

NameVirtualHost *:80

<Directory "/Users/myusername/Sites/">
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot /Users/myusername/Dropbox/dev_envs/
</VirtualHost>
<VirtualHost *:80>
    ServerName myproject.dev
    DocumentRoot /Users/myusername/Dropbox/dev_envs/myprojectname
</VirtualHost>

Tôi đã tìm thấy stackoverflow.com/questions/19313546/… . và nó hoạt động cho tôi !!!
clark yu

2
Tôi đã báo cáo đây là một lỗi cho apple rdar: // 24237290 và nhận được phản hồi vui nhộn này:> Bộ phận kỹ thuật đã cung cấp phản hồi sau về vấn đề này:> Đây là hành vi được mong đợi vì số tối đa. số bí danh trong tệp / etc / hosts được phép là 10. Có hơn 10 bí danh trong tệp / etc / hosts dường như không thực tế. Tôi rất hoan nghênh nếu có nhiều người báo cáo lỗi này và nói với họ rằng câu trả lời này hoàn toàn vô lý (và cũng không được ghi lại ở bất cứ đâu).
dwt

Có điều gì không tốt khi sử dụng .local TLD?
Yaakov Ainspan

Hoạt động tốt cho tôi trong mojave ... :)
rogerdpack

Câu trả lời:


169

Tôi đã gặp chính xác vấn đề tương tự và nó khiến tôi phát điên!

Đặt tất cả các mục nhập tệp máy chủ của bạn cho localhost thành một dòng như sau:

127.0.0.1 localhost myproject.dev myotherproject.dev
::1 localhost
fe80::1%lo0 localhost

Làm việc như một cái duyên đối với tôi. Có vẻ như một lỗi ở Sư Tử.


Điều này hoạt động và tôi nghĩ @ adam-gries nên đánh dấu nó là câu trả lời. Cảm ơn Jeremy!
zysoft

5
Bản sửa lỗi này có hiệu quả với tôi nhưng tôi đã đạt đến giới hạn 11 trang web, sau đó nó bắt đầu chạy chậm hơn! Hiện tại, tôi đã chia mọi thứ thành hai mục máy chủ (có cùng địa chỉ IP) và có vẻ như mọi thứ sẽ ổn.
Alex Ghiculescu

Cùng một vấn đề và giải pháp như @AlexGhiculescu, nhưng trong OS X 10.8 Mountain Lion.
chrishiestand

2
OS X 10.9, vẫn là một vấn đề và nó khiến tôi phát điên trong nhiều giờ! Brilliant, cảm ơn vì câu trả lời tuyệt vời!
robertp

2
Điều này chỉ hoạt động vì bạn đang nhập các mục máy chủ lưu trữ TRƯỚC quá trình định tuyến thiết bị localhost khác. Nếu máy chủ web của bạn đang ở dạng 127.0.0.1, thì các máy chủ đó cần phải nằm ở ĐẦU của tệp / etc / hosts để tra cứu nhanh. Tôi có vài chục dòng 127.0.0.1, chỉ khi tôi chuyển chúng lên đầu tệp / etc / hosts thì chúng mới giải quyết nhanh cho tôi.
Joey T

70

Có một vấn đề khác là 10.7. * Đến 10.8.4 đối với các trang web kết thúc bằng ".local" gây ra năm lần tra cứu thứ hai. Thông tin chi tiết và giải pháp do Bram (chúng tôi) Van Damme cung cấp tại liên kết sau:

http://www.bram.us/2011/12/12/mamp-pro-slow-name-resolving-with-local-vhosts-in-lion-fix/

"Theo mặc định, bất kỳ tên máy chủ nào kết thúc bằng .local được coi là máy chủ lưu trữ Bonjour thay vì truy vấn các mục nhập máy chủ DNS trong Tùy chọn mạng.

Để khắc phục sự cố này (mà không cần phải đổi tên từng vhost), bạn cần thêm các mục nhập IPv6 cho từng vhost của bạn trong tệp / etc / hosts của bạn: "

::1 mysite.local
fe80::1%lo0 mysite.local
127.0.0.1 mysite.local

Điều này cũng ảnh hưởng đến hệ thống cửa sổ. Giải pháp cũng hoạt động như một sự quyến rũ ở đó.
ToBe

Tôi tiếp tục gặp sự cố này khi trỏ máy chủ tới một máy ảo cục bộ. Tôi đã để tệp máy chủ của mình được định dạng độc đáo (các mục nhập trên dòng riêng của chúng, v.v.) và thêm các mục nhập bổ sung, sử dụng địa chỉ IPV6 từ máy ảo và tất cả các vấn đề về độ trễ của tôi đã biến mất. Tôi dường như chỉ gặp phải vấn đề này với các trang web kết thúc bằng .localvà việc thêm cả hai mục IPV4 / 6 đã khắc phục mọi thứ cho tôi (OS X 10.9)
Justin

Đã phải đấu tranh với điều này cho một chút vì tên máy của tôi trong "Chia sẻ" khung ưu đãi không phù hợp với một tôi đã nhập trong / etc / hosts, chỉ trong trường hợp nó giúp mọi người ...
abhishekmukherg

Chà. Tôi hiểu rằng đó ::1là phím tắt IPv6 tương đương với 127.0.0.1. Nhưng fe80::1%lo0nghĩa là gì? - à, đã trả lời tại superuser.com/questions/241642/…
AlexChaffee

trên macOS Sierra, điều này đã hoạt động nhưng tôi phải xóa dòng đầu tiên.
Bryce York

24

Tôi cũng gặp vấn đề tương tự, trên Lion.

Thật kỳ lạ, giải pháp của tôi ngược lại với giải pháp của Jeremy. Tôi đã có một loạt các mục nhập someproject.dev trên một dòng trong / etc / hosts. Tải một trang web trên bất kỳ trang web nào trong lần đầu tiên mất vĩnh viễn, khoảng một phút hoặc lâu hơn. Nếu tôi sử dụng lại nó trong vòng 5 giây hoặc lâu hơn thì rất nhanh, nhưng lâu hơn nữa và sẽ mất một phút. Tôi đã nghi ngờ đủ thứ, kết nối mysql, phiên bản Ruby, lỗi Rails, Apache, Phusion Passenger. Cho đến khi cuối cùng tôi nhìn vào Bảng điều khiển và nhận ra rằng các tra cứu DNS đang được cố gắng.

Vì vậy, tôi đặt tất cả chúng trên các dòng riêng biệt:

127.0.0.1 localhost

127.0.0.1 myproject.dev

127.0.0.1 myotherproject.dev

Và đột nhiên mọi thứ lại trở nên linh hoạt. Tương tự trên cả hai máy của tôi.


Đã thử mọi thứ ở đây trong stackoverflow nhưng điều này và bài đăng của user902664 đã giúp ích. Tất cả các dòng IPv4 và IPv6 phải nằm trên một dòng. Nếu chỉ sử dụng mục nhập IPv4 nhưng trên các đường riêng biệt, giảm từ 30 giây xuống ~ 1, sử dụng cùng với cài đặt IPv6 trên các đường riêng biệt giảm xuống ~ 0,5 giây.
tomis

Đây dường như là một lỗi điên rồ. Tôi có một mục nhập cho một địa chỉ, 192.168.56.3 với 14 bí danh. Xóa một bí danh và bạn có thể giải quyết các máy chủ sau <1 giây. Với bí danh thứ 14, phải mất ~ 30 giây để giải quyết một số mục đầu tiên trong danh sách ...
Brian M. Carr

Đây có phải là lỗi dành riêng cho OSX không? Bất cứ ai có thể liên kết đến một báo cáo lỗi?
pje

Tôi vừa dành hàng giờ để tìm hiểu thêm về cấu hình mạng hơn bao giờ hết. Tôi đã chuẩn bị thực hiện và thiết lập một máy chủ DNS cục bộ và sau đó điều này đã sửa nó. Cảm ơn bạn. Mavericks 10.9.5 tại đây.
dirtyfingers

13

Việc chỉ định cùng một máy chủ cho IPv6 :: 1 đã giúp tôi.

127.0.0.1 something.local.mydomain.org
::1 something.local.mydomain.org

Có, và một miền trên mỗi dòng.
warvariuc

1
Điều này đã khắc phục sự cố cho tôi. Trong trường hợp của tôi, ít nhất là không cần chỉ một miền trên mỗi dòng.
jeff-h

9

Đảm bảo đặt các mục IP v6 không cùng dòng với localhost

::1 localhost

các mục IP v6 đi trong một dòng riêng biệt

fe80::1%lo0 here and_here

Bây giờ đôi khi thực sự rất nhanh, nhưng hiếm có trường hợp ngoại lệ mà độ trễ cũ quay trở lại. Tuy nhiên, chúng có thể dựa trên những lý do khác.


1
Điều này đã làm việc cho tôi trên OS X 10.11.6 - ngay sau khi tôi sao chép mục nhập localhost IPv4 (một dòng cho 127.0.0.1) thành một dòng :: 1 có cùng bí danh, việc tìm kiếm đã tăng từ 4-5 giây xuống tức thì. Tôi cũng có một mục nhập 127.0.0.2 mà tôi đã sao chép thành :: 2. Tôi có một dòng cho mỗi địa chỉ. Cảm ơn!
RichVel

7

Trên OSX El Capitan, điều làm việc cho tôi là tạo một mục nhập IPv6 trùng lặp ngay trên mục nhập IPv4 như vậy

fe80::1%lo0 demo.test.dev
127.0.0.1   demo.test.dev

Đồng ý, hoạt động với mục nhập IPv6 trên hoặc dưới IPv4 miễn là nó có cùng danh sách bí danh.
RichVel

Đây là ngớ ngẩn, nhưng khắc phục vấn đề tôi đã có với Chrome là rất chậm giải quyết các liên kết localhost để đựng Docker laradock tôi (Safari luôn luôn là tốt)
jeff-h

Công trình cho High Sierra cũng - Firefox, Safari công việc có hay không có nó
Chris Athanasiadis

3

Việc đảm bảo rằng các tên máy chủ được xác định ở đầu tệp đã tạo ra sự khác biệt cho tôi. Theo mặc định, dòng 127.0.0.1 localhost đã ở đầu, chỉ cần thêm các mục nhập của bạn trên cùng một dòng.


Đây là giải pháp thực sự, đã thử tất cả phần còn lại và nó không liên quan gì đến các tham chiếu tất cả trên một dòng hoặc được liên kết với tuyến IPv6 (trừ khi có thể đó là tuyến chính của bạn trong apache conf ...) cảm ơn @Erik!
Joey T

Ngoài ra, con số này kéo dài hơn 2 hoặc 3 giây đối với tôi, giống như 10 đến 20 giây. Tôi có rất nhiều mục nhập 127.0.0.1 nhưng tất cả đều được liệt kê SAU KHI cấu hình localhost mặc định của OS X. Tôi cũng sử dụng Lion, không phải ML, nếu điều đó quan trọng.
Joey T

Đáng buồn thay, điều này không còn hoạt động với w / Mavericks - để lại sự ủng hộ của tôi ở đây cho Lion, mặc dù nó hoạt động tốt cho đến khi tôi nâng cấp lên Mavs vài tháng trước.
Joey T

1

Tôi gặp sự cố tương tự và phát hiện ra nguyên nhân là do bật IPv6 trên mạng LAN của mình, nhưng không định cấu hình IPv6 chính xác giữa mạng và ISP của tôi. Rõ ràng máy chủ DNS IPv6 được ưu tiên hơn DNS IPv4 khi máy khách được cung cấp cả hai. Phải mất vài giây (mỗi lần thử) máy khách mới phát hiện ra rằng IPv6 DNS không thể truy cập được hoặc bị thiếu và sau đó quay trở lại IPv4 DNS.


1

Lưu ý: Tôi đang sử dụng Windows và XAMPP, tuy nhiên trong khi nghiên cứu vấn đề, nhiều người đã gặp vấn đề tương tự trên Windows và Mac. Câu trả lời để tham khảo cho bất kỳ ai tìm thấy câu hỏi này vì tôi đã dành hàng giờ cố gắng tìm ra giải pháp phù hợp với mình:

Tôi đã thử nhiều giải pháp cho cùng một vấn đề trong đó có việc đưa tất cả các host trên cùng một dòng, loại bỏ dư thừa và host VirtualHosts, và cũng có thể bao gồm các dòng IPv6 - không ai trong số những một mình đã thành công.

Giải pháp duy nhất cho đến nay dường như phù hợp với tôi là sự kết hợp của tất cả các giải pháp:

  • Thay đổi miền tôi đang sử dụng từ mysite. cục bộ đến mysite. nhà phát triển . Lấy cảm hứng từ câu trả lời của @ Cleverlemming.
  • Kể cả các dòng IPv6.
  • Xóa các máy chủ ảo và máy chủ lưu trữ (tôi đã nhận xét chúng).

Trong tệp máy chủ của tôi, máy chủ của tôi hiện ở trên các dòng riêng biệt và cho đến nay sự cố dường như đã được khắc phục.

Chúc may mắn cho bất kỳ ai đang cố gắng giải quyết vấn đề này và nếu ai có bất kỳ thông tin nào để thêm, vui lòng làm như vậy - đây có vẻ là một vấn đề ảnh hưởng đến rất nhiều người mà không có nguyên nhân hoặc giải pháp nào được xác định.


1

Tôi cũng gặp phải vấn đề này và cuối cùng nhận ra rằng tôi có cùng một mục nhập máy chủ hai lần trên cùng một dòng:

ví dụ

127.0.0.1 localhost host1 host2 host3 host4 host5 host1 host6

Tôi đã xóa phiên bản thứ hai của cùng một máy chủ (trong ví dụ trên - host1) - và mọi thứ ngay lập tức tăng tốc.

Cảm thấy hơi ngớ ngẩn khi tôi phát hiện ra điều này, nhưng khi bạn có 10 tên máy chủ dài trên cùng một dòng và bạn thường xuyên thêm / xóa, nó có thể bị bỏ qua một cách rõ ràng.


0

Thủ thuật đã làm điều đó cho tôi là thêm

127.0.0.1 locahost

trên dòng đầu tiên của tệp máy chủ.

Từ tất cả các máy chủ ảo của tôi, chỉ những máy sử dụng cơ sở dữ liệu là chậm. Tôi tin rằng đó là do quá trình tìm kiếm "localhost" cho kết nối cơ sở dữ liệu đã làm chậm mọi thứ, vì tôi chỉ thêm địa chỉ cho các máy chủ ảo của mình chứ không phải "localhost". Bây giờ tất cả đều linh hoạt trở lại. :)


Tôi đã có hai định nghĩa về localhost trong đó; một cái có vẻ tốt hơn.
Aaron Brick

0

Tôi cũng gặp phải chuyện này. Tôi có một loạt các vhosts được xác định trên hai dòng, một cho IPv4 và một cho IPv6. Việc di chuyển máy chủ lưu trữ mà tôi đang cố gắng giải quyết để trở thành người đầu tiên trong danh sách đã đẩy nhanh tiến độ.

127.0.0.1 faster.example.dev host1.example.dev host2.example.dev host3.example.dev host4.example.dev host5.example.dev host6.example.dev
::1 faster.example.dev host1.example.dev host2.example.dev host3.example.dev host4.example.dev host5.example.dev host6.example.dev

0

Một vấn đề ngớ ngẩn khiến tôi mất một khoảng thời gian đáng kể: sau khi áp dụng câu trả lời của @ Cleverlemming , tôi phát hiện ra rằng có các mục nhập trùng lặp trên tệp máy chủ. Cái gì đó như:

::1          site1.local site2.local site1.local site3.local site4.local
fe80::1%lo0  site1.local site2.local site1.local site3.local site4.local
127.0.0.1    site1.local site2.local site1.local site3.local site4.local

Sau đó, việc phân giải IP cho site3.local và site4.local mất 5 giây chết này.

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.