-->

什么是防火墙的Symfony这样做,需要这么长时间?(What is the Symfony fir

2019-08-31 14:27发布

我Symfony的页面是不是太慢了(它加载在大约400毫秒),但考虑到一个事实,这只是一个简单的Hello World页面基本身份验证,应在加载小于100ms。 当我进入探查,我看到这一点:

请注意,它只是说,“防火墙”为250毫秒。 我以为防火墙只是为了保持用户离开网页的某些区域负责 - 我无法想象,采取任何时间超过几毫秒的时间加上它需要从数据库中获取(在这种情况下是用户信息的时间61毫秒)。

可能有人解释一下什么是防火墙实际上呢? 如果您有关于如何提高防火墙的性能,同时,将不胜感激任何一般的指针。


:我用Google搜索这个当然,我想指定了前面那我连接到MySQL数据库的IP地址,而不是主机名。 这似乎是慢Symfony的防火墙,我能找到的所有其他情况下的问题。


从我的项目的一些资源,可能是相关的:

  • security.yaml
  • routing.yaml
  • Astrups / SpectacleBundle /实体/ user.php的
  • Astrups / SpectacleBundle /服务/ Sha1Salted.php

Answer 1:

我做了一些google搜索,我发现这个家伙 ,似乎已经回答了你的问题。

15分钟研究后,我最终搞清楚,这是由于PHP PDO构造函数(我的防火墙是第一个连接到数据库,因为我用实体用户)。 有了这些知识的问题被很快发现( [1] , [2] ):事实证明使用DNS名称(如“本地主机”)而不是IP(如“127.0.0.1”)导致此问题。

该parameters.yml文件的简单编辑(改变本地主机为127.0.0.1)确实减少了防火墙负载时间缩短到只有最低限度的伎俩。



Answer 2:

唉,原来Rawdreeg 部分是正确的。 我做了一个20行PHP脚本来分析它需要多长时间才能连接到我的MySQL服务器:

<?php

$time = microtime(true);

$con = new PDO(...);

$connect_time = microtime(true);

$result = $con->query('SHOW TABLES');

$query_time = microtime(true);

var_dump($result->fetchAll(PDO::FETCH_ASSOC));

$time_con = ($connect_time - $time) * 1000;
$time_query = ($query_time - $connect_time) * 1000;

echo "Connection took $time_con ms\n";
echo "Query took $time_query ms\n";

输出是:

Connection took 230.18503189087 ms
Query took 64.532995223999 ms

这填补了Symfony的探查完美的空白。 好消息是,当我的应用程序开始运行,它会连接到MySQL服务器在本地通过插座,所以它可能会被速度极快! 很少有开发过程中我能做的速度虽然,除了本地镜像MySQL服务器。

因此,要总结的答案; 该Symfony的防火墙最初创建到MySQL数据库的连接,并在我的情况,这一方面是相当缓慢。 MySQL的连接时间占了我的情况的防火墙的成型时间80%以上。


注:我已经连接到由IP地址的MySQL服务器,我已经添加了skip-name-resolve到MySQL的配置无济于事。



Answer 3:

MySQL服务器可能是问题。 尝试添加skip-name-resolve[mysqld]你的部分my.cnf文件。 这从传入连接的IP地址进行反向DNS查找停止MySQL的。



文章来源: What is the Symfony firewall doing that takes so long?