奇怪的超时,例如生产服务器上的错误(网络错误(tcp_error))

时间:2019-01-04 12:37:19

标签: php server

我有一个正在运行的公司应用程序,该应用程序使用了非常慢的脚本。用于此操作的页面之一是运行SQL查询大约5分钟,然后运行PHP大约20分钟。

在此延迟之后,服务器向我发送了一条错误消息:

网络错误(tcp_error) -503错误-发生通讯错误:“”

我已经尝试通过增加PHP最大执行时间来解决问题,但没有成功。

如果您想访问代码,我可以提供,但是代码并不是很容易理解。

您知道如何解决此错误吗?

1 个答案:

答案 0 :(得分:1)

我认为问题出在计算量大,或者脚本处理了大量的数据库数据,因此请尝试以下方法之一:

  1. 尝试分页提取数据,尝试将数据分成较小的块。
  2. 不可能将计算隐藏和移动到其他地方:
    • 首先加载html,然后通过ajax加载数据
    • 尝试处理数据库过程中的数据(查询mysql,查看https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html
    • 通过异步通信提供服务,例如与Rabbit mq通信的脚本。处理服务上的数据,并将其发送回主应用程序。如果使用php,则可能需要另一个支持websockets和node.js的应用程序。
  3. 尝试缓存不经常计算的数据。例如。处理后获取某些数据时,将结果缓存在mongodb中,因此,如果未受影响,请先从mongo中获取它,并且不要重新计算它们。
  4. 考虑预先计算尽可能多的数据,并将它们存储在非关系数据库(mongodb,couchbase)的关系数据库(mysql postgresql)中。
  5. 此外,某些应用程序部分还尝试使用关系数据库以外的其他技术来提高效率(例如,通过弹性搜索进行搜索,或者通过neo4j进行映射关系)。
  6. 尝试在写入过程中通过db触发器将计算拆分为较小的块,并通过更新执行它们。另一种方法是,通过使用服务或在写逻辑本身上进行写以在较小的部分中进行计算。

之前,请执行上述任何操作,以尝试分析代码在哪里减慢了处理数据的速度以及提取了多少数据。

此外,在执行后台流程的情况下,您需要一些额外的数据以及跟踪流程的方法。您也可以运行以下命令:

<?php

  system("php someheavyprocessingscript.php &");
  //Load Html do some stuff here
?>

通过系统和正在执行的命令的结尾&,您可以在后台运行该进程。通常,我更喜欢一种服务方法,并通过一些websocket通过RabbitMq通信将结果提取到前端。

也可以考虑使用以下关键字:xdebug-profilerservice-oriented architecture,这将为您提供一些解决方法的知识以及一些额外的知识。