Вопрос или проблема
Я получаю эту ошибку в логах MySQL.
2025-01-01 9:02:42 8090 [Warning] Aborted connection 8090 to db: 'xxx' user: 'xxx' host: 'xxx' (Got an error reading communication packets)
Также, я получаю эту ошибку на стороне сервера, когда эта ошибка MySQL появляется на стороне сервера. (Все строки начинаются с [09:02:42] [luckperms-worker-0/WARN]
.)
[me.lucko.luckperms.lib.hikari.pool.PoolBase] luckperms-hikari - Не удалось проверить соединение me.lucko.luckperms.lib.mysql.cj.jdbc.ConnectionImpl@52d3db29 (Никаких операций не допускается после закрытия соединения.). Возможно, стоит рассмотреть использование более короткого значения maxLifetime.
java.sql.SQLTransientConnectionException: luckperms-hikari - Соединение недоступно, запрос завершился по тайм-ауту после 5002мс.
at me.lucko.luckperms.lib.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:696)
at me.lucko.luckperms.lib.hikari.pool.HikariPool.getConnection(HikariPool.java:197)
at me.lucko.luckperms.lib.hikari.pool.HikariPool.getConnection(HikariPool.java:162)
at me.lucko.luckperms.lib.hikari.HikariDataSource.getConnection(HikariDataSource.java:100)
at me.lucko.luckperms.common.storage.implementation.sql.connection.hikari.HikariConnectionFactory.getConnection(HikariConnectionFactory.java:169)
at me.lucko.luckperms.common.messaging.sql.SqlMessenger.getConnection(SqlMessenger.java:84)
at me.lucko.luckperms.common.messaging.sql.AbstractSqlMessenger.pollMessages(AbstractSqlMessenger.java:114)
at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1423)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1312)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1843)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1808)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:188)
Caused by: java.sql.SQLNonTransientConnectionException: Никаких операций не допускается после закрытия соединения.
at me.lucko.luckperms.lib.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110)
at me.lucko.luckperms.lib.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at me.lucko.luckperms.lib.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
at me.lucko.luckperms.lib.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
at me.lucko.luckperms.lib.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)
at me.lucko.luckperms.lib.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:73)
at me.lucko.luckperms.lib.mysql.cj.jdbc.ConnectionImpl.setNetworkTimeout(ConnectionImpl.java:2495)
at me.lucko.luckperms.lib.hikari.pool.PoolBase.setNetworkTimeout(PoolBase.java:566)
at me.lucko.luckperms.lib.hikari.pool.PoolBase.isConnectionAlive(PoolBase.java:173)
at me.lucko.luckperms.lib.hikari.pool.HikariPool.getConnection(HikariPool.java:186)
... 11 more
Caused by: me.lucko.luckperms.lib.mysql.cj.exceptions.ConnectionIsClosedException: Никаких операций не допускается после закрытия соединения.
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
at me.lucko.luckperms.lib.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
at me.lucko.luckperms.lib.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)
at me.lucko.luckperms.lib.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151)
at me.lucko.luckperms.lib.mysql.cj.NativeSession.checkClosed(NativeSession.java:1171)
at me.lucko.luckperms.lib.mysql.cj.jdbc.ConnectionImpl.checkClosed(ConnectionImpl.java:573)
at me.lucko.luckperms.lib.mysql.cj.jdbc.ConnectionImpl.setNetworkTimeout(ConnectionImpl.java:2491)
... 14 more
Когда я пытаюсь пинговать свой X сервер на сервере базы данных, потеря пакетов происходит одновременно с каждой ошибкой MySQL.
31.57.156.30:25577/tcp - Порт открыт - время=1.188мс
31.57.156.30:25577/tcp - Порт открыт - время=1.599мс
31.57.156.30:25577/tcp - Порт открыт - время=5.071мс
31.57.156.30:25577/tcp - Порт открыт - время=1.690мс
31.57.156.30:25577/tcp - Порт открыт - время=1.538мс
31.57.156.30:25577/tcp - Нет ответа - время=2015.160мс
31.57.156.30:25577/tcp - Нет ответа - время=2015.892мс
31.57.156.30:25577/tcp - Порт открыт - время=6.803мс
31.57.156.30:25577/tcp - Порт открыт - время=1.295мс
31.57.156.30:25577/tcp - Порт открыт - время=6.280мс
31.57.156.30:25577/tcp - Порт открыт - время=1.411мс
31.57.156.30:25577/tcp - Порт открыт - время=4.874мс
Я пытался изменить настройку конфигурации my.ini
с max_allowed_packet=16M
(по умолчанию) на
max_allowed_packet=256M
.
Ответ или решение
Ваша проблема связана с ошибкой MySQL, указанной в логах: [Warning] Aborted connection ... to db: ... (Got an error reading communication packets)
. Это может быть вызвано несколькими факторами, такими как нестабильная сеть, неправильные настройки MySQL или ошибки в конфигурации вашего сервера. Присутствуют также ошибки на стороне вашего сервера, связанные с библиотекой HikariCP, используемой для подключения к базе данных через плагин LuckPerms.
Возможные причины и решения:
-
Проблемы с сетью:
- Ваше описание проблемы, включая потерю пакетов в процессе пинга вашего X-сервера на сервере базы данных, указывает на проблемы с сетью. Это может быть вызвано неполадками в маршрутизации, перегрузкой сети или нестабильным соединением.
- Решение: Выясните, имеется ли на сети оборудование, которое может быть перегружено, и рассмотрите возможность оптимизации маршрутизации. Проверьте сетевые устройства, такие как коммутаторы и маршрутизаторы, на наличие ошибок или неисправностей.
-
Настройки конфигурации MySQL:
- Вы упомянули, что изменили параметр
max_allowed_packet
в файлеmy.ini
. Если ошибка продолжается, несмотря на это, возможно, требуется настройка других параметров. - Решение: Увеличьте значения
wait_timeout
иinteractive_timeout
, чтобы избежать разрыва соединений из-за долгого простоя. Сравните текущее использование ресурсов MySQL с параметрами в конфигурации, например, такими какnet_read_timeout
иnet_write_timeout
.
- Вы упомянули, что изменили параметр
-
Настройки библиотеки HikariCP:
- Библиотека, используемая вашим плагином, может использовать слишком долгое время жизни соединений (параметр
maxLifetime
), в результате чего соединения становятся невалидными до их завершения. - Решение: Установите более короткое значение
maxLifetime
, чтобы оно было меньше, чем значениеwait_timeout
в MySQL. Это предотвратит закрытие соединений до их повторного использования.
- Библиотека, используемая вашим плагином, может использовать слишком долгое время жизни соединений (параметр
Дополнительные действия:
- Мониторинг логов: Внимательно следите за логами MySQL и серверов, чтобы лучше понять, когда и почему происходят разрывы соединений.
- Обновление драйверов и зависимостей: Убедитесь, что все используемые вами драйверы и программные зависимости обновлены до последней версии для устранения ошибок и улучшения производительности.
- Тестирование оборудования: Проверьте физические компоненты вашего оборудования, включая кабели и сетевые карты, на наличие возможных неисправностей.
Ваше решение будет зависеть от конкретных условий и сети, поэтому проведите диагностику и протестируйте каждый предложенный метод, чтобы точно установить причину и устранить проблему. Оптимизация этих аспектов поможет обеспечить стабильную работу вашего сервера и базы данных.