【问题标题】:Increasing performance of exec() statement提高 exec() 语句的性能
【发布时间】:2017-02-10 12:18:24
【问题描述】:

我有一个问题,不一定在此处提出的大多数问题的范围内。

我正在开发一个应用程序,它会检查域中的某些 A 记录,并测试解析服务器上的端口以检查它们是否打开并正在侦听。

我已在网站的本地副本上添加了功能,但发布速度太慢了,想想看,当前发布的网站也是如此。

您可以在链接上看到应用程序:http://www.domainion.co.za

输入一个域名(不带 www),它会检查某些记录。

这是一个 symfony 应用程序,我通过运行多个 exec() 语句并挖掘特定信息来获取这些记录。我喜欢使用 exec 的原因是,如果返回多条记录,例如下面的命令,它可以让您将每个结果分配给数组的索引。

dig -x 154.0.174.35 +short @8.8.8.8

motairgdiool.hosted.co.za。 (索引 0)

kent.aserv.co.za。 (索引 1)

现在,这花费的时间太长(平均 8 秒才能加载)。我的问题是,如果你必须在这个应用程序中使用所有这些命令并在 shell 脚本中运行它,它们需要不到一秒钟的时间才能运行,我怀疑我需要这么长时间的原因是 PHP 正在打开和关闭一个每个命令的虚拟外壳。

为了更快地运行这些查询,我尝试了以下方法:

shell_exec() - 这需要大约相同的时间,并将所有结果作为字符串返回,我不能使用它。

proc_open - 需要更长的时间,也会返回一个长字符串。

symfony process() 组件 - 花费更长的时间,并将所有结果作为一个字符串返回

dns_check_record() - 您无法检查特定的子域记录

TLDR : 有什么方法可以获得我想要的记录 (n.domain.tld) 并且仍然让应用程序快速运行?

谢谢

【问题讨论】:

  • 打开和关闭虚拟外壳(即 pty)通常需要不到 0.1 秒(你可以用 time script -c true /dev/null 计时,我得到 0.05 秒)。问题出在其他问题上,例如缓慢的 DNS 或限制。
  • 有没有办法将您的评论转化为答案?所以我可以投票一千次???我认为使用 Google 的名称服务器会是更好的选择,因为我比托管服务器的 IDC 更信任 google。但是,是的,删除@8.8.8.8 几乎将速度提高了三倍,我将统计页面与常规 DNS 页面分开以使其更快。感谢您的帮助!
  • 听起来您完成了所有工作,因此您可以根据需要将其发布为答案。不过考虑一下 Eric 的 execless 版本,它应该可以再节省几分之一秒,同时更强大

标签: php bash exec


【解决方案1】:

使用本地 DNS。它会比查询@8.8.8.8 更快

dig -x 154.0.174.35 +short

【讨论】:

    【解决方案2】:

    $ php -r 'var_dump(dns_get_record("35.174.0.154.in-addr.arpa"));'

    在五分之一秒内返回以下内容,包括调用 PHP 解释器:

    array(2) {
      [0]=>
      array(5) {
        ["host"]=>
        string(25) "35.174.0.154.in-addr.arpa"
        ["class"]=>
        string(2) "IN"
        ["ttl"]=>
        int(7192)
        ["type"]=>
        string(3) "PTR"
        ["target"]=>
        string(16) "kent.aserv.co.za"
      }
      [1]=>
      array(5) {
        ["host"]=>
        string(25) "35.174.0.154.in-addr.arpa"
        ["class"]=>
        string(2) "IN"
        ["ttl"]=>
        int(7192)
        ["type"]=>
        string(3) "PTR"
        ["target"]=>
        string(25) "motairgdiool.hosted.co.za"
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-04-24
      • 1970-01-01
      • 2011-07-23
      • 2012-12-12
      • 1970-01-01
      • 2018-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多