Протухшие соединения с MySQL (The last packet successfully received … milliseconds ago)
- Платформы
- Paper · Purpur · Velocity · один сервер
- Проверено
- Проверено
- Уверенность
- Уверенность 80%
Как это выглядит в логе
Достаточно одной из строк. Агент сверяет их с логом локально, на вашем сервере.
logs/latest.log
[WARN] The last packet successfully received from the server was
Симптомы
- Запросы плагина периодически падают после простоя: CommunicationsException с «The last packet successfully received from the server was N milliseconds ago»
Причина
Драйвер MySQL использовал соединение, которое сервер БД или промежуточная сеть уже закрыли по простою: время жизни соединения в пуле больше wait_timeout БД или idle-таймаута NAT/файрвола.
Вероятные причины
- maxLifetime пула (HikariCP, по умолчанию 30 мин) больше wait_timeout БД — сервер закрывает простаивающие соединения раньше пула
- Соединения рвёт NAT/файрвол/прокси БД по idle-таймауту (N заметно меньше wait_timeout)
- Перезапуск БД или ручное завершение соединений (KILL) во время работы сервера
Как исправитьНизкий риск
- Узнайте таймаут БД:
SHOW VARIABLES LIKE 'wait_timeout';(секунды). - В конфиге плагина задайте
maxLifetimeпула меньшеwait_timeoutминимум на 30 секунд (для LuckPerms —pool-settings.maximum-lifetimeв миллисекундах). - Если между сервером и БД есть NAT/файрвол с коротким idle-таймаутом — включите
keepaliveTimeпула (например, 60000 мс) и держитеmaxLifetimeниже этого таймаута. - Не используйте
autoReconnect=trueкак основное решение — пул должен сам заменять старые соединения.