При подключении к базе данных с постоянным соединением (чтобы избежать накладных расходов времени соединения), PHP предупреждает, что «сервер ушел». Это код, который я использую:
$db = new mysqli("p:10.0.0.1", "user", "pass");
Я посмотрел на следующие вопросы:
И куча других. Ни один из них не совпадает с моей проблемой: у них либо есть долгосрочные сценарии или запросы, либо они спрашивают, как автоматически переподключиться при этой ошибке. В моем случае это не долго работающий скрипт (это пул соединений), и это не ошибка: скрипты вроде бы работают нормально, просто выводит это уродливое предупреждение. Пул соединений PHP содержит только те соединения, для которых истекло время ожидания.
На моем предыдущем сервере я очень редко видел это предупреждение. Фактически, была проблема с зависанием страниц (теперь устранена), которая часто показывала это предупреждение или ошибку (я не помню какая) через несколько минут. Я так и не понял, в чем проблема, но, похоже, это связано.
Я хочу избежать необходимости менять каждый скрипт, так как на сервере работают сотни небольших приложений (каждое из них автономно и имеет свои собственные учетные данные базы данных). Добавление @
перед каждым соединением имеет побочный эффект, заключающийся в том, что он подавляет все ошибки, а не только эту конкретную ошибку, и выглядит как обходной путь вместо решения основной проблемы.
Это просто ошибка в PHP или есть параметр конфигурации, который ее разрешает? Я видел, как кто-то рекомендовал более длительный тайм-аут на стороне MariaDB, но это только уменьшает частоту, с которой мы будем видеть предупреждения вместо того, чтобы решать проблему фундаментально. Может ли PHP время от времени проверять свой пул или просто удалять старые подключения из пула?
Я также проверил страницы документации ( 1 , 2 ), но в документации и комментариях упоминается эта проблема.