質問: 追記(2018/01/04 22:37) 結果概要: 頂いた回答を元に、プロバイダのDNSからパブリックDNSに変更したところ、 物凄く処理時間のかかっていたPHP関数(file_get_contetns(),curl())が、 劇的に早くなりました。 変更前の処理時間:約5~10秒 変更後の処理時間:約0.3秒 ###### 作業内容:検証用コマンドの実施(ネットワーク設定変更前) ▼検証前に現在の設定確認 ``` [root@localhost ~]# cat /etc/resolv.conf # Generated by NetworkManager domain tojox1.kt.home.ne.jp search tojox1.kt.home.ne.jp nameserver 220.152.38.233 nameserver 220.152.38.201 [root@localhost ~]# ls -l /etc/sysconfig/network-scripts/ | grep eth -rwxr-xr-x. 1 root root 5891 1月 18 21:10 2017 ifdown-eth -rwxr-xr-x. 1 root root 12084 1月 18 21:10 2017 ifup-eth →"ifcfg-eth0"ファイルが存在しませんでした。 →恐らくサーバー構築時に、私が作っていません。今回の回答内容を元に調べている際にこのファイルも必要ということを学びました。(構築当時、ネットワークが繋がっているようだったため、「ネットワーク設定はきっとOKだ!」と思っていました。) [root@localhost ~]# cat /etc/sysconfig/network NETWORKING=yes NETWORKING_IPV6=no HOSTNAME=localhost.localdomain GATEWAY=192.168.0.1 ``` ▼検証用コマンドの結果 | 実行環境 | 実行したコマンド | 早さ(体感) | 備考 | | --- | --- | --- | --- | | 自宅サーバー ~~centOS6.8~~ centOS6.9 | dig example.com @8.8.8.8 | 0.1秒以下 | | | 自宅サーバー ~~centOS6.8~~ centOS6.9 | ping -c 1 93.184.216.34 | 約0.1秒 | | | 自宅サーバー ~~centOS6.8~~ centOS6.9 | dig example.com | 0.1秒以下 | 意外と早かったです | | 自宅サーバー ~~centOS6.8~~ centOS6.9 | ping -c 1 example.com | 約0.1秒 | 意外と早かったです | ###### 作業内容:検証用コマンドの実施(ネットワーク設定含む) ネットワーク設定変更作業: ▼ifcfg-eth0を作成 ``` [root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 #memo: このファイルは20180114に自分で新規作成した(このファイルが存在しなかった為)) #参考: http://www.obenri.com/_minset_cent6/netconfig_cent6.html DEVICE=eth0 NM_CONTROLLED=yes ONBOOT=yes TYPE=Ethernet BOOTPROTO=none IPADDR=192.168.0.10 HWaddr=00:1F:29:4C:86:61 DNS1=8.8.8.8 //パブリックDNSを指定 DNS2=8.8.4.4 //パブリックDNSを指定 NETMASK=255.255.255.0 GATEWAY=192.168.0.1 DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System eth0" ``` ▼ネットワーク再起動 ``` [root@localhost ~]# service network restart インターフェース eth0 を終了中: デバイスの状態: 3 (切断済み) [ OK ] ループバックインターフェースを終了中 [ OK ] ループバックインターフェイスを呼び込み中 [ OK ] インターフェース eth0 を活性化中: アクティブ接続の状態: アクティベート済み アクティブ接続のパス: /org/freedesktop/NetworkManager/ActiveConnection/3 [ OK ] ``` ▼resolv.confが自動で更新された事を確認しました ``` [root@localhost ~]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 8.8.8.8 nameserver 8.8.4.4 //備考: centos6ではifcfg-eth0を作ると自動でresolv.confが設定されるという記事を読み、実際に更新されることを確認しました。 ``` ▼(こちらは変更していないので、)変更が無い事を確認 ``` [root@localhost ~]# cat /etc/sysconfig/network NETWORKING=yes NETWORKING_IPV6=no HOSTNAME=localhost.localdomain GATEWAY=192.168.0.1 ``` ▼検証用コマンドの結果 | 実行環境 | 実行したコマンド | 早さ(体感) | 備考 | | --- | --- | --- | --- | | 自宅サーバー ~~centOS6.8~~ centOS6.9 | dig example.com @8.8.8.8 | 0.1秒以下 | 変化無し | | 自宅サーバー ~~centOS6.8~~ centOS6.9 | ping -c 1 93.184.216.34 | 約0.1秒 | 変化無し | | 自宅サーバー ~~centOS6.8~~ centOS6.9 | dig example.com | 0.1秒以下 | 変化無し | | 自宅サーバー ~~centOS6.8~~ centOS6.9 | ping -c 1 example.com | 約0.1秒 | 変化無し | ▼PHP関数の計測結果 | 実行環境 | 関数名 | ※ネットワーク設定変更前の早さ | ネットワーク設定変更後の早さ | 備考 | | --- | --- | --- | --- | --- | | 自宅サーバー ~~centOS6.8~~ centOS6.9 | curl() | 約5秒 | 約0.2秒 | 早くなりました!! | | 自宅サーバー ~~centOS6.8~~ centOS6.9 | file_get_contents() | 約10秒 | 約0.3秒 | 早くなりました!! | 検証以上
回答: **Googleページのスクレイピングはポリシー違反なのでやめましょう**(←とりあえず残しておきます) コメントによるとやはりネットワーク設定に問題があると思いますので回答を書き換えました。まずは、DNS設定に問題があるのか、その他ネットワーク設定に問題があるのか確認してみるとよいです。 たぶん名前解決に時間がかかっていると思われるので、下記コマンドで確認してみてください。**下記どれでも遅い場合はその他ネットワーク設定に問題があるはずです。** #### DNS確認 1. GoogleなどのパブリックDNSをIP直指定で名前解決をしてみます(名前解決が**ない**ので早いはず) 2. **example.com** に直接IP直指定でPINGをうってみます(名前解決が**ない**ので早いはず) 3. 現在のDNS設定で名前解決してみます(名前解決が**ある**ので遅いはず) 4. 現在のDNS設定でPINGをうってみます(名前解決が**ある**ので遅いはず) ``` #(↓早いはず)google-public-dns-a.google.com:8.8.8.8 dig example.com @8.8.8.8 #(↓早いはず)example.com:93.184.216.34 ping -c 1 93.184.216.34 #(↓遅いはず)プロバイダのDNSを使って名前解決する dig example.com #(↓遅いはず)プロバイダのDNSを使ってPING ping -c 1 example.com ``` #### resolv.conf 上記から、DNS設定に問題がある場合は、直接外部プロバイダのDNSを指定するのではなく、ルーターから名前解決できるようにしてください。CentOSにプライベートIPを振っているようなので、多分 **192.168.0.1, 192.168.1.1** のようなプライベートIPアドレスです。ネットワーク設定に問題のないWindowsなどで確認してみてください。 そして、たぶん必要ないと思われるので`domain, search`はコメントアウトしてください。これらはざっくりいうとドメインの補完機能です。 例えば、現在の設定でいうと`http://something.tojox1.kt.home.ne.jp`を`http://something`だけでアクセスできるようにする機能です。この機能が必須でdomainもsearchも同じなら、**domain** だけ残すようにします。複数ドメインが必要な場合は **search** のみにします。 **/etc/resolv.conf** ``` #domain tojox1.kt.home.ne.jp #search tojox1.kt.home.ne.jp tojox2.kt.home.ne.jp #←複数ドメインの場合 nameserver ルーターのIPアドレス ``` そして下記コマンドでネットワークを再起動してからDNSのレスポンスを確認してみます。 ``` sudo service network restart #OR #sudo /etc/init.d/network restart #名前解決の応答を確認 dig www.google.co.jp curl -L https://www.google.co.jp ``` #### パブリックDNS たまにプロバイダのDNS応答速度が非常に不安定な場合があります。その場合はパブリックDNSに変更してみます。 * GoogleパブリックDNS * ベリサインパブリックDNS #### ネットワーク設定 ネットワークアダプタやルーターに問題がある場合は下記を参考にしてみてください。基本的にネットワークアダプタに問題がある場合はルーターや同じネットワーク上のWindowsマシンからのレスポンスも遅いはずです。 * CentOSで使ってないネットワークアダプタを無効にする * CentOSのネットワークアダプタを固定IPに変更する(DHCPの場合) * CentOSやルーターのプライベートネットワーク向けのIPv6サポートを無効にしてみる * CentOSでSELinuxやiptablesが有効になっている場合はOFFにしてみる * ルーターの設定を確認してみる(ルーティング設定やパケットフィルタなど)