Tomcat не использует повторно процесс зависания postgres

У меня проблема, когда базовые запросы из приложения tomcat приводят к тому, что весь процесс postgres переходит в состояние «простаивает в транзакции».

Это связано с тем, что по некоторым причинам запросы никогда не завершаются. Относится к проблеме с приложением и поднятой проблеме с разработчиком приложения, и они изучают.

Поскольку tomcat считает, что запрос все еще активен, он никогда не выполняет откат или фиксацию и зависает.

Я могу убить процессы «простоя в транзакции», но tomcat не очищает автоматически прерванные соединения и не запускает новые без перезапуска tomcat.

Есть ли способ заставить tomcat очистить брошенное соединение?

 labkey                    |  8195 | 2018-04-17 10:53:17.002785+01 |                        | idle in transaction
 labkey                    |  8359 | 2018-04-17 10:53:16.632977+01 |                        | idle in transaction
 labkey                    |  8249 | 2018-04-17 10:53:16.631433+01 |                        | idle in transaction
 labkey                    |  8250 | 2018-04-17 10:53:17.173161+01 |                        | idle in transaction
 labkey                    |  8251 | 2018-04-17 10:53:16.194544+01 |                        | idle in transaction
 labkey                    |  8358 | 2018-04-17 10:53:16.634106+01 |                        | idle in transaction
 labkey                    |  8362 | 2018-04-17 10:53:14.843128+01 |                        | idle in transaction
 labkey                    |  8382 | 2018-04-17 10:53:15.903067+01 |                        | idle in transaction

Что вы имеете в виду под «повторным использованием процесса»? Если вы разорвете соединение, то после этого уже нечего "повторно использовать".

a_horse_with_no_name 17.04.2018 12:46

Может быть, слово «повторное использование» неправильное. Но вынуждая tomcat очищать оставленные соединения и запускать новые без перезапуска tomcat. Спасибо

Jay 17.04.2018 13:11

Tomcat никогда не выпустит COMMIT или ROLLBACK. Это зависит от приложения. Драйверы в JDBC-совместимом режиме будут выдавать COMMIT при сбросе в режим auto-commit, предполагая, что ваш пул соединений настроен на раздачу соединений в auto-commit.

Christopher Schultz 17.04.2018 18:57

Как вы определяете «заброшенный»? Приложения обычно используют пул соединений, который намеренно поддерживает соединения с базой данных, чтобы избежать накладных расходов на создание нового физического соединения для каждого соединения, требуемого приложением. Обычно это рассматривается как оптимизация производительности.

Christopher Schultz 17.04.2018 18:58
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
65
0

Другие вопросы по теме