現在の位置: ホーム> 最新記事一覧> 共有DNSが効果的かどうかを監視する方法

共有DNSが効果的かどうかを監視する方法

M66 2025-05-31

ネットワークリクエストにPHPを使用する場合、Curlライブラリを使用することがよくあります。 Curlは、単純なHTTP要求をサポートするだけでなく、Cookie、DNS、SSLなどの高度な機能もサポートする強力なツールです。

その中で、 curl_share_initは比較的まれなCurl機能であり、DNSキャッシュ、Cookie、SSLセッションなどのデータを共有する複数のCurlハンドルがDNSキャッシュを共有することにより、重複ドメイン名の解像度を削減し、パフォーマンスを向上させることができます。

しかし、実際に使用すると、多くの人が尋ねます。
共有DNSキャッシュは効果的ですか?それを監視する方法は?
この記事では、段階的に分析し、完​​全なPHPの例を示します。

curl_share_initとは何ですか?

curl_share_init()関数は、共有ハンドルの初期化に使用されます。 curlopt_share curl_setoptcurlopt_shareオプションと組み合わせて、複数のCurl要求が特定のデータを共有できるようにします。普通の内容は次のとおりです。

  • DNSキャッシュ( curl_lock_data_dns

  • Cookie( curl_lock_data_cookie

  • SSLセッション( curl_lock_data_ssl_session

例えば:

 $sh = curl_share_init();
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);

このようにして、複数のカールハンドルが同じ$ shにバインドされ、DNSキャッシュを共有できます。

DNSが共有されているかどうかを監視する方法は?

Curlは「DNSキャッシュヒットを監視する」ためのインターフェイスを提供していませんが、間接的に観察できます。

  1. 最初の要求時間消費:最初のリクエストには通常、DNS解像度時間が含まれます。

  2. その後のリクエストの時間をかける:共有DNSが有効になっている場合、同じドメイン名のその後のリクエストは解像度時間を大幅に短縮する必要があります。

言い換えれば、 curlinfo_nameLookup_timecurlinfo_total_timeを使用して監視できます。

  • ドメイン名の解決時間

  • 総時間消費

最初のリクエストのnamelookup_timeとその後のリクエストを比較することにより、DNSキャッシュが有効かどうかを判断できます。

完全なサンプルコード

curl_share_initを使用した完全なPHPコードを次に示し、 https://m66.net/testに2つのリクエストを送信し、DNS解像度時間を印刷します。

 <?php
$sh = curl_share_init();
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);

$url = 'https://m66.net/test';

// 最初のリクエスト
$ch1 = curl_init($url);
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch1, CURLOPT_SHARE, $sh);

curl_exec($ch1);
$dns_time1 = curl_getinfo($ch1, CURLINFO_NAMELOOKUP_TIME);
$total_time1 = curl_getinfo($ch1, CURLINFO_TOTAL_TIME);
curl_close($ch1);

echo "最初のリクエスト:\n";
echo "DNS 分析時間: {$dns_time1} 2番\n";
echo "総時間消費: {$total_time1} 2番\n";

// 待って12番,新しいリクエストをシミュレートします
sleep(1);

// 2番目のリクエスト
$ch2 = curl_init($url);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_SHARE, $sh);

curl_exec($ch2);
$dns_time2 = curl_getinfo($ch2, CURLINFO_NAMELOOKUP_TIME);
$total_time2 = curl_getinfo($ch2, CURLINFO_TOTAL_TIME);
curl_close($ch2);

echo "\n2番目のリクエスト:\n";
echo "DNS 分析時間: {$dns_time2} 2番\n";
echo "総時間消費: {$total_time2} 2番\n";

// 掃除
curl_share_close($sh);
?>

コードキー分析

共有の有効化curl_share_initcurlshopt_shareを使用して、共有DNSデータを構成します。

時間を取得するcurl_getinfoを介してcurlinfo_namelookup_timeを取得します。

比較効果:最初の要求には通常、明らかなDNS時間があります(数十ミリ秒など)。 2回目のキャッシュが有効になった場合、 namelookup_timeは0に近くなります。

注意すべきこと

  • 同じドメイン名:同じホスト名( M66.NETなど)のみがキャッシュを押すことができます。

  • PHP Curlバージョン:PHPの古いバージョンの中には、 curl_shareを完全にサポートしていない場合があります。 phpinfo()を使用してCurlバージョンを確認することをお勧めします。

  • スレッドの安全性:マルチスレッドまたはマルチプロセス環境でcurl_shareを使用する場合は、セキュリティのロックを確認する必要があります。