Mac OS X Lionで仮想ホストへの解決が非常に遅い


26

(Snow Leopardから)Mac OS X Lionにアップグレードして以来、仮想ホストへの解決が非常に遅いことに気づきました(約3秒)。これを解決する多くのヒント(たとえば、.local TLDを使用しない)を見つけましたが、それらは私のセットアップには適用されません。

私のセットアップは非常に簡単です:-Apache 2(Lionに同梱)-有効なPHP-いくつかの仮想ホストを追加-インストールされたMailおよびSMTP Pearパッケージ

Apacheのhostsファイルは次のようになります。

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を実行しているときに問題はすでに存在していました。

これは小さな問題のように思えるかもしれませんが、仮想ホストに1日に数百回アクセスしている場合は、想像できるようにかなりの時間の無駄になります。


問題の説明には、システムの負荷、ネットワークの使用率、メモリの使用率などの通常の問題を除外しているものはありません。仮想ホストの解決が遅いと言います。どこから?ホストコマンド、またはサーバーが提供するページの表示?純粋にDNS /ホスト関連の場合は、コマンドラインで次のようなパフォーマンスの時間を計ることができます。time host snd.dev
labradort

回答:


22

長いDNSタイムアウトは、ほとんどの場合、IPv6の問題の兆候です。

ApacheにIPv6接続が必要ですか?

そうでない場合は、変更することをお勧めします

<VirtualHost *:80>

<VirtualHost 0.0.0.0:80>

または、IPv6接続を完全に無効にします。


3
+1:OSXでは、ipv6 DNSルックアップが大きな問題です。なんらかの理由により、OSXは最初にipv6ルックアップを行います。それがタイムアウトした場合(30秒程度)、v4で続行します。OSXは、v6の場合は最初に/ etc / hostsをチェックしないようです。v4の場合はチェックしますが、v6がタイムアウトになってからです。v6を無効にできない場合は、v6 DNSを含む完全に機能するv6セットアップがあることを確認してください。
トニー

答えてくれてありがとう。これがここで役割を果たしている唯一の問題であるかどうかはわかりませんが、ローカル仮想ホストの解決にかかる時間はほとんどの場合減少しています。
バートジェイコブス

DNSルックアップの解決には、30ではなく2〜5秒かかりました。したがって、タイムアウトになる可能性は低いため、私の問題が何であったかはわかりません。いずれにせよ、この回答から変更を加えてからすぐになりました。
ジャスティン14

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解決の問題を解決しませんでした(おそらくシステムの再起動後)。本当に役立ったのは、次のように/ etc / hostsにipv6スタイルのIPを追加することでした:

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

Resolving project.localで5秒間停止する代わりに。


あなたのアドバイスは私が必要としたすべてでした-標準127.0.0.1と一緒に私のホストファイルにIPv6エントリを追加しただけで、問題は完全に解決しました。
カークウォル

わーい!これはOS X 10.8(Mountain Lion)で役立ちます。10.6から10.8に直接アップグレードした後、ローカルホストのルックアップが永遠に続くことに気付きました。解決する前にタイムアウトになったようです。これで問題が解決しました。ありがとう!
Lothar_Grimpsenbacher

最近この問題に遭遇し、/ etc / hostsのIPv6エントリで完全に修正されました。
ニールアルブロック

これは、Max OS 10.10.1
ezmilhouse

10

MacOSXのライオン .localドメインは、マルチキャストDNSリゾルバ(ボンジュール)用に「予約」されています。

これは、.localで終わるドメインを検索すると、 / etc / hostsのにmDNSルックアップ(最大5秒)が行われることを意味します。

修正:

  1. テストドメインを他のTLDに変更します(例.dev
  2. dsclツール使用して、例外を追加します。

私のためにも働いていました...これをやった私の開発サイトのほんの一部に夢中になりました...低くて見よ.... localで終わるすべてのもの!私はハイシエラにアップグレードするまで、これは...私に起こっ@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「テスト」ドメインが必要な場合は、ドメイン名を登録することも非常に良い考えです。 DNSで構成されます。構成するドメイン名が非常に可能性の高いドメインシステムの他の部分との奇妙な競合させることである(この場合のmDNSなど。)
ジェームズ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
残念ながら、これは問題を解決しません。あなたの提案の背後にある論理を教えてください。あなたの応答をありがとう。
バートジェイコブス

私は最近、IPV6を実行していないが/ etc / hostsに同様のエントリを持っているマシンからのsnmp応答のために異常に長い時間をかけて戦いました。ここで頭に浮かぶのは、ネームサーバーのタイムアウトです。ただし、ホストはバインドよりも優先されるため、少し奇妙です。(もちろん、構成可能です)。
エイリアン生命体

確かに非常に奇妙です。場合によっては、ホストへの解決は瞬時に行われ(予想どおり)、他のホストでは数秒かかる場合があります。
バートジェイコブス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.