美文网首页
记一次 PHP 应用 curl 耗时 namelookup_ti

记一次 PHP 应用 curl 耗时 namelookup_ti

作者: 别瞄我 | 来源:发表于2020-02-12 00:21 被阅读0次

    起因

    日常检查接口可用性,发现有个接口耗时较长

    排查过程

    1. 确定耗时位置:根据日志基本确定“请求支付宝接口耗时”
    2. 跟支付宝核实:将请求日志提工单给支付宝技术客服,后反馈“支付宝这边是正常不耗时的”
    3. 怀疑是自己服务器问题:查找资料后知道可根据 curl_getinfo() 获取 curl 请求详细信息,从中确定问题与服务器DNS有关
    // 代码
    $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. 查找资料:多数案例说是 IPv6、IPv4 问题,采用下面的方案尝试,但问题依然存在。说明我这里遇到的不是这个原因。
    /*
    如果服务器开启了IPv6,curl 默认会优先解析IPv6,
    在对应域名没有IPv6的情况下,会等待IPv6 DNS解析失败 TIMEOUT 之后才按以前的正常流程去找IPv4,
    所以就会出现比较耗时的情况。
    */
    curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); 
    $response = curl_exec($ch);
    $curlInfo = curl_getinfo($ch);
    
    1. 验证服务器DNS解析该域名是否正常(方法参考文末链接):发现有1台服务器异常


    2. 修改服务器DNS验证(方法参考文末链接):修改后正常


    3. 查看业务日志:正常

    然后

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

    相关资料:

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

    使用 curl 命令 查看 请求耗时情况:https://www.cnblogs.com/lnlvinso/p/9775484.html

    Linux 查看和设置DNS:https://jingyan.baidu.com/article/c275f6ba4775a9e33d756785.html

    相关文章

      网友评论

          本文标题:记一次 PHP 应用 curl 耗时 namelookup_ti

          本文链接:https://www.haomeiwen.com/subject/qegffhtx.html