Странный тайм-аут, например, ошибка на производственном сервере (ошибка сети (tcp_error)) - PullRequest
0 голосов
/ 04 января 2019

У меня запущено приложение для моей компании, которое использует очень медленные сценарии. На одной из страниц, используемых для этого, SQL-запрос выполняется в течение 5 минут, затем PHP запускается в течение 20 минут.

После этой задержки сервер отправляет мне сообщение об ошибке:

Ошибка сети (tcp_error) - Ошибка 503 - Произошла ошибка связи: ""

Я уже пытался решить проблему, увеличив максимальное время выполнения PHP без успеха.

Если вы хотите получить доступ к коду, я могу дать его, но код не совсем прост для понимания.

Знаете ли вы, как я могу исправить эту ошибку?

1 Ответ

0 голосов
/ 04 января 2019

Я полагаю, что проблема в вычислительных ресурсах или сценарий обрабатывает много данных из базы данных, поэтому попробуйте некоторые из этих подходов:

  1. Попробуйте разбить данные на страницы, попробуйте извлечь данные в более мелкие куски.
  2. Невозможно попытаться спрятать и переместить вычисление в другое место:
    • Сначала загрузите html, а затем загрузите данные через ajax
    • Попробуйте обработать данные в процедуре базы данных (quessing mysql, посмотрите https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html)
    • Создайте сервис с асинхронной связью, например, скрипт, который связывается с rabbit mq. Обработайте данные о сервисе и отправьте их обратно в основное приложение. В случае php вам может понадобиться другое приложение, которое поддерживает websockets и node.js для этой части.
  3. Попробуйте кэшировать данные, которые вычисляются не так часто. Например. при извлечении некоторых данных после обработки они кэшируют результат в mongodb, поэтому, если это не затронуто, сначала извлеките их из mongo и не пересчитывайте их.
  4. Рассмотрите возможность предварительного расчета как можно большего количества данных и сохраняйте их либо в реляционной базе данных (mysql postgresql), либо в нереляционной (mongodb, couchbase).
  5. Также некоторые части приложения пытаются использовать другие технологии помимо реляционных баз данных, чтобы сделать их эффективными (например, упругий поиск для поиска или neo4j для отображения отношений).
  6. Попробуйте разделить вычисления на более мелкие куски и либо с помощью триггеров db во время записи, либо выполнить их обновление. Альтернативный подход заключается в том, что при выполнении записи с использованием служб или самой логики записи выполняются вычисления меньшими частями.

Также ДО Делая что-либо выше, попытайтесь проанализировать, где код замедляется, сколько требуется для обработки данных и сколько данных извлекается.

Кроме того, в случае выполнения фонового процесса вам потребуются некоторые дополнительные данные и способ отслеживания процесса. Также вы можете запустить следующее:

<?php

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

Через систему и окончание & при выполнении команды вы запускаете процесс в фоновом режиме. Обычно я предпочел бы больше использовать сервисный подход и через некоторые веб-сокеты для извлечения результата во внешний интерфейс через соединение RabbitMq.

Также рассмотрите возможность прибегнуть к поиску и поиску следующих ключевых слов: xdebug-profiler, service-oriented architecture, это даст вам несколько советов о том, как ее решить + некоторые дополнительные знания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...