Я настроил среду разработки в среде Docker Swarm, которая состоит из 2 узлов, нескольких сетей и нескольких микросервисов.Ниже приведен пример того, как это выглядит в кластере.
Service Network Node Image Version
nginx reverse proxy backend, frontend node 1 latest stable-alpine
Service A backend, database node 2 8-jre-alpine
Service B backend, database node 2 8-jre-alpine
Service C backend, database node 1 8-jre-alpine
Database postgresql database node 1 latest alpine
Сервисы - это приложения с начальной загрузкой 2.1.7 с boot-data-jpa.Все вышеперечисленные сервисы содержат подключение базы данных к экземпляру postgresql.Для базы данных я настроил только следующие свойства в application.properties:
spring.datasource.url
spring.datasource.username
spring.datasource.password
spring.datasource.driver-class-name
spring.jpa.hibernate.ddl-auto=
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
Через некоторое время я вижу, что лимит соединения в postgresql превышает, что не позволяет создавать новое соединение.
2019-09-21 13:01:07.031 1 --- [onnection adder] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Cannot acquire connection from data source org.postgresql.util.PSQLException: FATAL: sorry, too many clients already
Аналогичная ошибка проявляется и при попытке подключиться через ssh к базе данных.
psql: FATAL: sorry, too many clients already
То, что я пытался до сих пор:
spring.datasource.hikari.leak-detection-threshold=20000
, что не помогло.
Я нашел несколько ответов на эту проблему, например:
увеличить лимит соединения в postgresql
Нет, я не хочу этого делать.Это просто временное решение.Это снова загрязнит соединение, но чуть позже.
добавить время простоя в конфигурации hikaripCP
Стандартная конфигурация hikariCP уже имеет значение по умолчанию 10 минут, что не помогает
добавить максимальное время жизни в конфигурацию hikariCP
Стандартная конфигурация hikariCP уже имеет значение по умолчанию 30 минут, что не помогает
уменьшить количество неактивных соединений в конфигурации hikariCP
Стандартная конфигурация hikariCP уже имеет значение по умолчанию 10, что не помогает
установить минимальное время простоя в конфигурации hikariCP
По умолчанию 10, и яхорошо с этим.b
Я ожидаю соединения около 30 для служб, но нахожу около 100 соединений.Перезапуск служб или их остановка также не закрывают свободные соединения.Каковы ваши предложения?Это специфическая проблема докера?Кто-то испытывал такую же проблему?