【问题标题】:Connection between apache2 server and client breaks after 6 minutesapache2 服务器和客户端之间的连接在 6 分钟后中断
【发布时间】:2017-06-07 08:00:41
【问题描述】:

我在用户浏览器和 apache2 服务器之间的连接上有很大的问题。我们要处理大量数据,因此请求需要更多时间,客户端必须等待响应超过几分钟。它运行了一个月......然后它开始断开连接(或类似的东西)。

每次连接在 6 分钟后关闭。 Chrome 浏览器会抛出一个ERR_EMPTY_RESPONSE。 DHC 显示No responseNo content。在 apache error.log 中,日志级别设置为调试,什么都没有,在 symfony 中运行 tail -f dev.log 我可以看到,该脚本仍在运行.. 直到最后,没有错误。

奇怪的是,当我从 Windows 运行脚本时,连接不是在 6 分钟后而是在 12 分钟后断开。当我在 Mac 上通过浏览器运行 2 个不同的请求时,我有 12 分钟的时间。

调试了 2 天,一无所获。连一行日志都没有。

接下来我可以去哪里看?网络日志?也许有人有同样的问题?

【问题讨论】:

  • 您的脚本不适合在浏览器中启动。您应该使用命令。
  • 我知道,它将在 RabbitMQ 上进行优化和构建。但现在我们没有时间去做。那不能是命令服务,最终用户必须运行它。它甚至适用于 2 小时的请求。现在它无法处理 6 分钟。
  • 没时间?将脚本/控制器传输到命令只需 5 分钟。 symfony.com/doc/current/console.html 此外,使用命令将允许您添加调试消息、监控内存等。
  • 正如我所说,这是并且必须是用户界面的一个组件。现在我运行命令或请求并不重要,因为脚本也以这种方式运行良好,但是连接中断并且用户不知道该过程是否完成。我可以告诉用户它是否已经完成,我会一直优化它,这不是一个大问题,但我想知道是什么导致了这个问题......
  • 是的,这是一个问题,因为您不会遇到命令问题。

标签: php symfony apache2


【解决方案1】:

没有找到原因,但答案是流式响应 + JSON。如果有响应,连接不会中断。

这为调试(实时内存使用)提供了强大的工具,并向我表明问题出在内存(当存储太多对象时,学说中的实体管理器非常低)。

顺便说一句,使用 Doctrine 的$em->clear() 的方式很酷。

foreach ($items as $item) {
    $item = $this->em->getReference('AppBundle:Item',$item->getId());
    .......

    $em->flush();
    $em->clear();
}

这很酷,因为您不需要分离与$item 相关的对象,只需完全清除并将其附加回来。运行速度非常快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 2022-01-24
    • 2020-10-09
    • 2016-02-16
    • 2010-12-25
    • 2017-05-25
    • 2012-04-24
    相关资源
    最近更新 更多