記一次 PHP 應(yīng)用 curl 耗時 namelookup_time 較長問題處理過程

起因

日常檢查接口可用性,發(fā)現(xiàn)有個接口耗時較長

排查過程

  1. 確定耗時位置:根據(jù)日志基本確定“請求支付寶接口耗時”
  2. 跟支付寶核實:將請求日志提工單給支付寶技術(shù)客服,后反饋“支付寶這邊是正常不耗時的”
  3. 懷疑是自己服務(wù)器問題:查找資料后知道可根據(jù) curl_getinfo() 獲取 curl 請求詳細信息,從中確定問題與服務(wù)器DNS有關(guān)
// 代碼
$response = curl_exec($ch);
$curlInfo = curl_getinfo($ch);

// $curlInfo 信息如下
{
    "url": "https://openapi.alipay.com/gateway.do?app_id=2018...省略ing",
    "content_type": "text\/html;charset=UTF-8",
    "http_code": 200,
    "header_size": 420,
    "request_size": 821,
    "filetime": -1,
    "ssl_verify_result": 0,
    "redirect_count": 0,
    "total_time": 1.856358, # 總耗時
    "namelookup_time": 1.51023, # 說明主要是解析DNS耗時較長
    "connect_time": 1.544082,
    "pretransfer_time": 1.657145,
    "size_upload": 44,
    "size_download": 477,
    "speed_download": 477,
    "speed_upload": 44,
    "download_content_length": 477,
    "upload_content_length": 44,
    "starttransfer_time": 1.856326,
    "redirect_time": 0,
    "redirect_url": "",
    "primary_ip": "110.75.231.202",
    "certinfo": []
}
  1. 查找資料:多數(shù)案例說是 IPv6、IPv4 問題,采用下面的方案嘗試,但問題依然存在。說明我這里遇到的不是這個原因。
/*
如果服務(wù)器開啟了IPv6,curl 默認會優(yōu)先解析IPv6,
在對應(yīng)域名沒有IPv6的情況下,會等待IPv6 DNS解析失敗 TIMEOUT 之后才按以前的正常流程去找IPv4,
所以就會出現(xiàn)比較耗時的情況。
*/
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); 
$response = curl_exec($ch);
$curlInfo = curl_getinfo($ch);
  1. 驗證服務(wù)器DNS解析該域名是否正常(方法參考文末鏈接):發(fā)現(xiàn)有1臺服務(wù)器異常


  2. 修改服務(wù)器DNS驗證(方法參考文末鏈接):修改后正常


  3. 查看業(yè)務(wù)日志:正常

然后

刪除 curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
下班

相關(guān)資料:

PHP curl_setopt 文檔:https://www.php.net/manual/en/function.curl-setopt.php

使用 curl 命令 查看 請求耗時情況:https://www.cnblogs.com/lnlvinso/p/9775484.html

Linux 查看和設(shè)置DNS:https://jingyan.baidu.com/article/c275f6ba4775a9e33d756785.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容