posted 7 years ago
-
-
Number of slices to send:
Optional ‘thank-you’ note:
-
-
Hi all
I have a problem with datasource configuration.
I have a Tomcat 7 with Java 7 and a Quartz web application.
This application has a datasource configured:
With maxActive = 3 I expected to see no more than 3 connection opened. Instead of this, I see a new connection opened every time a Quartz Job starts, untill 8 connection (don’t know if this is the default limit).
So it seems this parameter is not considered, but other yes, because the connection to database is correct so username, password etc… are ok.
Can you help me please?
thanks
posted 7 years ago
-
-
Number of slices to send:
Optional ‘thank-you’ note:
-
-
Are you running this via Eclipse (WTP)?
I seem to remember it uses its own values for those things…
posted 7 years ago
-
-
Number of slices to send:
Optional ‘thank-you’ note:
-
-
Welcome to the JavaRanch!
Quartz has its own persistent store options for the schedules it runs. So unless you’ve specifically told Quartz to use pool «jdbc/name», then your configuration for the application connection pool would not apply.
Tomcat 7 complicates things, since you can either use the traditional Apache DBCP pool manager or the new Tomcat DBCP pool manager. I don’t know about the Apache DBCP manager, but I just took a peek at the Tomcat DBCP manager, and what it actually does is query maxActive when a pool Connection is requested. So in theory, more connections could physically exist for some reason even though Tomcat will only actually assign maxActive or less connections at one time.
I’m going to be a «small government» candidate. I’ll be the government. Just me. No one else.
Tim Holloway
Saloon Keeper
Posts: 26557
posted 7 years ago
-
-
Number of slices to send:
Optional ‘thank-you’ note:
-
-
Dave Tolls wrote:Are you running this via Eclipse (WTP)?
I seem to remember it uses its own values for those things…
Good point. Actually, WTP makes a (incomplete) clone of the Tomcat settings to use when it launches Tomcat. And it doesn’t update from your primary settings automatically, so WTP may not actually be using your coded maxConnections.
It is, in fact, a royal pain, which is why I prefer to use the Mongrel (sysdeo) Tomcat plugin for Eclipse instead of WTP.
I’m going to be a «small government» candidate. I’ll be the government. Just me. No one else.
Dave Tolls
Rancher
Posts: 4801
posted 7 years ago
-
-
Number of slices to send:
Optional ‘thank-you’ note:
-
-
Tim Holloway wrote:
It is, in fact, a royal pain, which is why I prefer to use the Mongrel (sysdeo) Tomcat plugin for Eclipse instead of WTP.
I have a completely separate Tomcat instance that I deploy to, and attach a debugger.
I always had too many inconsistencies with inbuilt servers.
Tim Holloway
Saloon Keeper
Posts: 26557
posted 7 years ago
-
-
Number of slices to send:
Optional ‘thank-you’ note:
-
-
Try Mongrel. You install Tomcat for stand-alone operation, point the Mongrel plugin to it and it will automatically handle start/stop/restart and debug connections.
It runs just like what you’re doing, but automates the process, so the standard stand-alone config files are what actually gets used and not some stale incomplete copy.
I’m going to be a «small government» candidate. I’ll be the government. Just me. No one else.
Dave Tolls
Rancher
Posts: 4801
posted 7 years ago
-
-
Number of slices to send:
Optional ‘thank-you’ note:
-
-
Tim Holloway wrote:Try Mongrel. You install Tomcat for stand-alone operation, point the Mongrel plugin to it and it will automatically handle start/stop/restart and debug connections.
It runs just like what you’re doing, but automates the process, so the standard stand-alone config files are what actually gets used and not some stale incomplete copy.
Ta.
I’ll try and remember the next time I’m in a place that has a Tomcat set up I can hook into.
Current client has their own setup.
The joy of contracting. I get to witness the many and varied ways people can set up their systems and dev environments.
Luke Rossi
Greenhorn
Posts: 4
posted 7 years ago
-
-
Number of slices to send:
Optional ‘thank-you’ note:
-
-
Thanks for you replies, but it’ was nothing related to quartz. It was a problem of factory org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory
using org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory (replacing the originial tomcat 7 jar) it works
Don’t know why, but it works. With org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory even if initialSize was set to 8, only one was instantiated. Simply replacinig with org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory, 8 were instantiated
Luke Rossi
Greenhorn
Posts: 4
posted 7 years ago
-
-
Number of slices to send:
Optional ‘thank-you’ note:
-
-
I talked before time…
initialSize is correctly instantied.
maxActive is not considered, so a new connection is always opened every time…
Я использую пул соединений tomcat через ресурсы JNDI.
В разделе context.xml
:
<Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"
username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
maxActive="1000" maxIdle="100" maxWait="10000"
url="jdbc:mysql://localhost:3306/mydatabase"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" />
In web.xml
:
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/mydb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Из классов java, в которых мне нужны соединения с базой данных, я выполняю этот поиск:
Context initContext = new InitialContext();
DataSource ds = (DataSource)initContext.lookup("java:/comp/env/jdbc/mydb");
Мое первое сомнение — это тип DataSource. Это то же самое, используя javax.sql.DataSource
or org.apache.tomcat.jdbc.pool.DataSource
?
Более того, иногда я получаю ошибку «Слишком много подключений». Я прочитал много вопросов/ответов на stackoverflow по этому поводу, но мне не удается понять, в чем может быть проблема.
Я следил за документами tomcat и правильно закрываю наборы результатов, операторы и соединение.
РЕДАКТИРОВАТЬ
Моя версия кота 7.0.26. Значит, должна быть ошибка (см. ссылку, предложенную пользователем informatik01)
[Статья была написана в 2005 году и частично устарела. По возможности будет переписана.]
В наше время трудно представить себе веб-приложение, которое не использовало бы базу данных для своих нужд. При работе с базой данных очень важно следить за соединениями к базе и вовремя освобождать их. Для этих целей разработчики веб-приложений пишут так называемые Connection Pools (или же используют/исправляют существующие).
Одним из лучших сервлет-контейнеров есть Apache Tomcat. Tomcat хорошо еще и тем, что он использует свой собственный DBCP (Database Connection Pool).
О том, как в полной мере воспользоваться преимуществами DBCP сервера Tomcat, и будет эта статья.
Предположим, в сети по IP-адресу 192.168.0.5 находится Oracle с базой данных TESTDB и пользователем DBuser с паролем DBpass.
Для того, чтобы настроить Tomcat на эту базу, необходимо в конфигурационном фале confserver.xml в раздел Context (если нету, необходимо создать его внутри раздела Host непосредственно перед его окончанием) добавить следующие строки:
<resource name="newDS" auth="Container" type="javax.sql.DataSource"/> <resourceparams name="newDS"> <parameter> <name>factory</name> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter> <parameter> <name>url</name> <value>jdbc:oracle:thin:@192.168.0.10:1521:TESTDB</value> </parameter> <parameter> <name>username</name> <value>DBuser</value> </parameter> <parameter> <name>password</name> <value>DBpass</value> </parameter> <parameter> <name>driverClassName</name> <value>oracle.jdbc.driver.OracleDriver</value> </parameter> <parameter> <name>maxActive</name> <value>100</value> </parameter> <parameter> <name>maxIdle</name> <value>10</value> </parameter> <parameter> <name>maxWait</name> <value>10000</value> </parameter> <parameter> <name>removeAbandoned</name> <value>true</value> </parameter> <parameter> <name>removeAbandonedTimeout</name> <value>60</value> </parameter> </resourceparams>
С помощью этой конфигурации создается Data Source с именем newDB. Рассмотрим параметры этого объекта.
Параметр factory говорит о том, какую фабрику нужно использовать для создания объектов, реализующих интерфейс DataSource. Следующий параметр представляет собой URL для доступа к базе данных. Параметры username и password содержат соответсвенно имя пользователя/схемы и пароль. Имя драйвера базы данных указано в параметре driverClassName.
Следующие параметры отвечают непосредственно за Connection Pool. Рассмотрим их немного подробнее.
maxActive — максимальное количество соединений, которые будут содержаться в пуле. Если значение этого параметра установить в 0, то ограничения на кол-во подключений к базе не будет. В конфигурации самого сервера баз даннных такой параметр тоже существует. Думаю не стоит объяснять, почему его значение должно быть больше, чем maxActive.
maxIdle — максимальное количество простаивающих соединений, которые будут оставаться в пуле. При значении этого параметра равным нулю, ограничений не будет.
maxWait — если время ожидания соединения превысит значение параметра maxWait (в миллисекундах), пользователь получит Exception. При значении maxWait равным -1, время ожидания не ограничено.
Прошу обрать ваше внимание на следующую очень важную вещь. Tomcat работает под виртуальной машиной (JVM). Для освобождения памяти JVM использует сборщик мусора (garbage collector). GC имеет очень высокий приоритет и при освобождении памяти Tomcat будет входить в состояние ожидания (на доли секунды, реже — на несколько секунд). При маленьких значениях maxWait, соединение может не установиться из-за таймаута. Значение 10000 в подавляющем большинстве случаев будет оптимальным.
removeAbandoned — при установке этого парамера в true, заброшенные соединения будут освобождены, когда кол-во свободных соединений в пуле невелико.
removeAbandonedTimeout — этот параметр указывает в секундах время, через которое любое простаивающее соединение будет считаться заброшенным.
После этого, нужно настроить наше веб-приложение для работы с DataSource. Делается это так, в файле-дескрипторе web.xml пишем:
<resource -ref> <description>Описание ресурса</description> <res -ref-name>newDB</res> <res -type>javax.sql.DataSource</res> <res -auth>Container</res> </resource>
Наконец-то мы и добрались до использования всего вышенаписанного на практике. Чтобы доступиться до нашего DataSource через JNDI и создавать соединения с базой можно написать такой себе класс (импорт пакетов и обработка ошибок опущены):
public class ConnectionFactory { private static final String DATASOURCE_NAME = "newDB"; private static DataSource ds = null; static { Context initContext = new InitialContext(); Context envContext = (Context)initContext.lookup("java:/comp/env"); ds = (DataSource) envContext.lookup(DATASOURCE_NAME); } public static Connection getConnection() throws SQLException{ Connection conn = ds.getConnection(); return conn; } }
Жду ваших комментариев.
пул соединений tomcat имеет параметр maxActive и параметр maxIdle мои вопросы.
- в чем разница между этими двумя параметрами?
- что такое сценарий реального мира, где вы можете иметь другое значение для maxActive, чем для maxIdle?
по какой-то причине документы не имеют смысла для меня. maxActive и maxIdle существуют как в dbcp apache, так и в JDBC-пуле tomact 7 согласно документам на
http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html
maxActive (int) максимальное количество активных соединений, которые могут быть
выделено из этого пула одновременно. Значение по умолчанию-100maxIdle (int) максимальное количество соединений, которые должны быть сохранены
в бассейне все время. Значение по умолчанию maxActive: 100 Idle
соединения проверяются периодически (если включено) и соединения, которые
бездействовал дольше minEvictableIdleTimeMillis выйдет.
(Также см. testWhileIdle)
3 ответов
maxActive прямо вперед. maxIdle можно объяснить таким образом-скажем, у вас есть 100 активных соединений max и, скажем, вы установили maxIdle на 80. Предполагая, что в базу данных нет запросов, будут протестированы только 80 соединений (через validationquery) и останутся активными. Остальные 20 будут закрыты. Поэтому в любой момент Вы можете иметь только 80 неактивных соединений.
Возможно, вы захотите установить другой номер, чтобы предотвратить дополнительные (ненужные) соединения, выходящие на база данных. Потому что каждое соединение, обслуживаемое базой данных, потребляет ресурсы (например, память).
Но, предполагая, что вы установили maxActive размер 100 и все 100 используются почти все время, эта настройка, очевидно, не имеет значения.
maxActive
the maximum number of active connections that can be allocated from this pool at the same time.
этот атрибут используется для ограничения количества соединений, которые могут быть открыты пулом.
maxIdle
(int) The maximum number of connections that should be kept in the pool **at all times.**
это для ограничения простоя соединений. Соединения (не больше значения maxIdle) не будут освобождены, так что следующий запрос на соединения будет намного быстрее.
Итак, в слове, maxActive-ограничить максимальное число подключений.
но простоя(maxIdle
или minIdle
) для исполнения проблема (время обмена с пространством / ресурсами), среди которых maxIdle должен ограничить максимальные соединения(ресурсы), с которыми вы собираетесь обмениваться временем.
в небольших средах подключения к базам данных не являются проблемой, потому что их не так много, а ресурсы сервера почти не повреждены. В больших средах количество подключений к базе данных потребляет много ресурсов, поэтому вам нужно оптимизировать способ управления подключениями к базе данных, используя меньшее возможное количество подключений, что даст вам лучшую производительность. На этом этапе maxActive устанавливает максимальное количество подключений, которые могут быть сделаны к базе данных пул, ограничивающий ресурсы, назначенные инициатору запроса. С maxIdle вы указываете, что, если соединение «простаивает», оно будет закрыто, если нет минимальных соединений «maxIdle». Почему не менее maxIdle?, потому что вам нужны некоторые соединения, готовые для следующих запросов к базе данных, поэтому вам не нужно открывать и закрывать снова так много соединений, если пул должен быть заполнен, поэтому вы освобождаете много ресурсов.
Problem
Confluence frequently crashes under heavy load when using a JNDI connector and the Tomcat 8 connection pool
The following appears in the atlassian-confluence
.log
atlassian-confluence.log
2015-11-24 15:38:32,626 ERROR [ContainerBackgroundProcessor[StandardEngine[Standalone]]] [sf.hibernate.util.JDBCExceptionReporter] logExceptions Cannot get a connection, general error
2015-11-24 15:39:20,591 WARN [localhost-startStop-1] [tomcat.dbcp.dbcp2.BasicDataSourceFactory] log Name = confluence Property maxActive is not used in DBCP2, use maxTotal instead. maxTotal default value is 8. You have set value of "15" for "maxActive" property, which is being ignored.
Diagnosis
Environment
- Confluence 5.8 or above
- Tomcat 8 or above
-
JNDI connection is being used in
server.xml
withmaxActive
<Resource name="jdbc/confluence" auth="Container" type="javax.sql.DataSource" ... maxActive="30" ... />
Cause
In Tomcat 8 the syntax for the connection pool has changed from using MaxActive
to MaxTotal
and the default value is 8. This can cause database connection issues.
Resolution
In conf/server.xml
change maxActive
to maxTotal
<Resource name="jdbc/confluence" auth="Container" type="javax.sql.DataSource"
...
maxTotal="30"
...
/>
See Configuring a MySQL Datasource in Apache Tomcat for an example.
Last modified on Nov 2, 2018
Related content
- No related content found
Hi @trask, I can see two types of debug logs
-> available jmx metrics
-> newly available JMX metrics since the last output
INFO c.m.a.a.i.p.AvailableJmxMetricLogger — available jmx metrics: don’t have any object name reaalted to connection pool
but after some time I can see newly available JMX Metrics which contains connection pool object as you can see below
`_2022-05-06 05:50:19.824Z INFO c.m.a.a.i.p.AvailableJmxMetricLogger — newly available jmx metrics since last output:
- object name: Catalina:j2eeType=Servlet,WebModule=//localhost/mono,name= ,J2EEApplication=none,J2EEServer=none
attributes: asyncSupported (boolean), available (number), backgroundProcessorDelay (number), classLoadTime (number), countAllocated (number), errorCount (number), loadOnStartup (number), loadTime (number), maxInstances (number), maxTime (number), minTime (number), modelerType (string), objectName (string), processingTime (number), requestCount (number), runAs (other), servletClass (string), singleThreadModel (boolean), stateName (string) - object name: tomcat.jdbc:name=»jdbc/catalystone»,context=/mono,engine=Catalina,type=ConnectionPool,host=localhost,class=org.apache.tomcat.jdbc.pool.DataSource,connections=PooledConnection[0]
attributes: AutoCommit (boolean), Catalog (string), Closed (boolean), ConnectionVersion (number), Discarded (boolean), Holdability (number), Initialized (boolean), LastConnected (number), LastValidated (number), MaxAgeExpired (boolean), ReadOnly (boolean), Released (boolean), Schema (string), Suspect (boolean), Timestamp (number), TransactionIsolation (number) - object name: tomcat.jdbc:name=»jdbc/catalystone»,context=/mono,engine=Catalina,type=ConnectionPool,host=localhost,class=org.apache.tomcat.jdbc.pool.DataSource,connections=PooledConnection[1]
attributes: AutoCommit (boolean), Catalog (string), Closed (boolean), ConnectionVersion (number), Discarded (boolean), Holdability (number), Initialized (boolean), LastConnected (number), LastValidated (number), MaxAgeExpired (boolean), ReadOnly (boolean), Released (boolean), Schema (string), Suspect (boolean), Timestamp (number), TransactionIsolation (number) - object name: Catalina:type=Valve,host=localhost,context=/mono,name=StandardContextValve
attributes: asyncSupported (boolean), className (string), modelerType (string), stateName (string) - object name: Catalina:type=DataSource,host=localhost,context=/mono,class=javax.sql.DataSource,name=»jdbc/catalystone»
attributes: abandonWhenPercentageFull (number), accessToUnderlyingConnectionAllowed (boolean), active (number), alternateUsernameAllowed (boolean), borrowedCount (number), className (string), commitOnReturn (boolean), connectionProperties (other), createdCount (number), dataSource (other), dataSourceJNDI (other), defaultAutoCommit (boolean), defaultCatalog (other), defaultReadOnly (other), defaultTransactionIsolation (number), driverClassName (string), fairQueue (boolean), idle (number), ignoreExceptionOnPreLoad (boolean), initSQL (other), initialSize (number), jdbcInterceptors (string), jmxEnabled (boolean), logAbandoned (boolean), logValidationErrors (boolean), loginTimeout (number), maxActive (number), maxAge (number), maxIdle (number), maxWait (number), minEvictableIdleTimeMillis (number), minIdle (number), modelerType (string), name (string), numActive (number), numIdle (number), numTestsPerEvictionRun (number), password (string), poolSweeperEnabled (boolean), propagateInterruptState (boolean), reconnectedCount (number), releasedCount (number), releasedIdleCount (number), removeAbandoned (boolean), removeAbandonedCount (number), removeAbandonedTimeout (number), returnedCount (number), rollbackOnReturn (boolean), size (number), suspectTimeout (number), testOnBorrow (boolean), testOnConnect (boolean), testOnReturn (boolean), testWhileIdle (boolean), timeBetweenEvictionRunsMillis (number), url (string), useDisposableConnectionFacade (boolean), useEquals (boolean), useLock (boolean), useStatementFacade (boolean), username (string), validationInterval (number), validationQuery (string), validationQueryTimeout (number), validatorClassName (other), waitCount (number) - object name: Catalina:type=Valve,host=localhost,context=/mono,name=NonLoginAuthenticator
attributes: cache (boolean), changeSessionIdOnAuthentication (boolean), className (string), disableProxyCaching (boolean), modelerType (string), securePagesWithPragma (boolean), stateName (string) - object name: tomcat.jdbc:name=»jdbc/catalystone»,context=/mono,engine=Catalina,type=ConnectionPool,host=localhost,class=org.apache.tomcat.jdbc.pool.DataSource
attributes: AbandonWhenPercentageFull (number), AccessToUnderlyingConnectionAllowed (boolean), Active (number), AlternateUsernameAllowed (boolean), BorrowedCount (number), CommitOnReturn (boolean), ConnectionProperties (other), CreatedCount (number), DataSource (other), DataSourceJNDI (other), DbProperties (other), DefaultAutoCommit (boolean), DefaultCatalog (other), DefaultReadOnly (other), DefaultTransactionIsolation (number), DriverClassName (string), FairQueue (boolean), Idle (number), IgnoreExceptionOnPreLoad (boolean), InitSQL (other), InitialSize (number), JdbcInterceptors (string), JdbcInterceptorsAsArray (other), JmxEnabled (boolean), LogAbandoned (boolean), LogValidationErrors (boolean), MaxActive (number), MaxAge (number), MaxIdle (number), MaxWait (number), MinEvictableIdleTimeMillis (number), MinIdle (number), Name (string), NumActive (number), NumIdle (number), NumTestsPerEvictionRun (number), Password (string), PoolName (string), PoolSweeperEnabled (boolean), PropagateInterruptState (boolean), ReconnectedCount (number), ReleasedCount (number), ReleasedIdleCount (number), RemoveAbandoned (boolean), RemoveAbandonedCount (number), RemoveAbandonedTimeout (number), ReturnedCount (number), RollbackOnReturn (boolean), Size (number), SuspectTimeout (number), TestOnBorrow (boolean), TestOnConnect (boolean), TestOnReturn (boolean), TestWhileIdle (boolean), TimeBetweenEvictionRunsMillis (number), Url (string), UseDisposableConnectionFacade (boolean), UseEquals (boolean), UseLock (boolean), UseStatementFacade (boolean), Username (string), ValidationInterval (number), ValidationQuery (string), ValidationQueryTimeout (number), Validator (other), ValidatorClassName (other), WaitCount (number) - object name: tomcat.jdbc:name=»jdbc/catalystone»,context=/mono,engine=Catalina,type=ConnectionPool,host=localhost,class=org.apache.tomcat.jdbc.pool.DataSource,connections=PooledConnection[4]
attributes: AutoCommit (boolean), Catalog (string), Closed (boolean), ConnectionVersion (number), Discarded (boolean), Holdability (number), Initialized (boolean), LastConnected (number), LastValidated (number), MaxAgeExpired (boolean), ReadOnly (boolean), Released (boolean), Schema (string), Suspect (boolean), Timestamp (number), TransactionIsolation (number) - object name: tomcat.jdbc:name=»jdbc/catalystone»,context=/mono,engine=Catalina,type=ConnectionPool,host=localhost,class=org.apache.tomcat.jdbc.pool.DataSource,connections=PooledConnection[5]
attributes: AutoCommit (boolean), Catalog (string), Closed (boolean), ConnectionVersion (number), Discarded (boolean), Holdability (number), Initialized (boolean), LastConnected (number), LastValidated (number), MaxAgeExpired (boolean), ReadOnly (boolean), Released (boolean), Schema (string), Suspect (boolean), Timestamp (number), TransactionIsolation (number) - object name: tomcat.jdbc:name=»jdbc/catalystone»,context=/mono,engine=Catalina,type=ConnectionPool,host=localhost,class=org.apache.tomcat.jdbc.pool.DataSource,connections=PooledConnection[2]
attributes: AutoCommit (boolean), Catalog (string), Closed (boolean), ConnectionVersion (number), Discarded (boolean), Holdability (number), Initialized (boolean), LastConnected (number), LastValidated (number), MaxAgeExpired (boolean), ReadOnly (boolean), Released (boolean), Schema (string), Suspect (boolean), Timestamp (number), TransactionIsolation (number) - object name: tomcat.jdbc:name=»jdbc/catalystone»,context=/mono,engine=Catalina,type=ConnectionPool,host=localhost,class=org.apache.tomcat.jdbc.pool.DataSource,connections=PooledConnection[3]
attributes: AutoCommit (boolean), Catalog (string), Closed (boolean), ConnectionVersion (number), Discarded (boolean), Holdability (number), Initialized (boolean), LastConnected (number), LastValidated (number), MaxAgeExpired (boolean), ReadOnly (boolean), Released (boolean), Schema (string), Suspect (boolean), Timestamp (number), TransactionIsolation (number) - object name: tomcat.jdbc:name=»jdbc/catalystone»,context=/mono,engine=Catalina,type=ConnectionPool,host=localhost,class=org.apache.tomcat.jdbc.pool.DataSource,connections=PooledConnection[6]
attributes: AutoCommit (boolean), Catalog (string), Closed (boolean), ConnectionVersion (number), Discarded (boolean), Holdability (number), Initialized (boolean), LastConnected (number), LastValidated (number), MaxAgeExpired (boolean), ReadOnly (boolean), Released (boolean), Schema (string), Suspect (boolean), Timestamp (number), TransactionIsolation (number) - object name: tomcat.jdbc:name=»jdbc/catalystone»,context=/mono,engine=Catalina,type=ConnectionPool,host=localhost,class=org.apache.tomcat.jdbc.pool.DataSource,connections=PooledConnection[7]
attributes: AutoCommit (boolean), Catalog (string), Closed (boolean), ConnectionVersion (number), Discarded (boolean), Holdability (number), Initialized (boolean), LastConnected (number), LastValidated (number), MaxAgeExpired (boolean), ReadOnly (boolean), Released (boolean), Schema (string), Suspect (boolean), Timestamp (number), TransactionIsolation (number)
2022-05-06T05:50:19.825812595Z`
after sometime I can also see a debug log saying no longer available jmx metrics since last output as below
`2022-05-06 05:51:18.023Z INFO c.m.a.a.i.p.AvailableJmxMetricLogger — no longer available jmx metrics since last output:
- object name: Catalina:j2eeType=Servlet,WebModule=//localhost/mono,name=local_default,J2EEApplication=none,J2EEServer=none
attributes: singleThreadModel (other) - object name: tomcat.jdbc:name=»jdbc/catalystone»,context=/mono,engine=Catalina,type=ConnectionPool,host=localhost,class=org.apache.tomcat.jdbc.pool.DataSource,connections=PooledConnection[5]
attributes: AutoCommit (boolean), Catalog (string), Closed (boolean), ConnectionVersion (number), Discarded (boolean), Holdability (number), Initialized (boolean), LastConnected (number), LastValidated (number), MaxAgeExpired (boolean), ReadOnly (boolean), Released (boolean), Schema (string), Suspect (boolean), Timestamp (number), TransactionIsolation (number) - object name: tomcat.jdbc:name=»jdbc/catalystone»,context=/mono,engine=Catalina,type=ConnectionPool,host=localhost,class=org.apache.tomcat.jdbc.pool.DataSource,connections=PooledConnection[2]
attributes: AutoCommit (boolean), Catalog (string), Closed (boolean), ConnectionVersion (number), Discarded (boolean), Holdability (number), Initialized (boolean), LastConnected (number), LastValidated (number), MaxAgeExpired (boolean), ReadOnly (boolean), Released (boolean), Schema (string), Suspect (boolean), Timestamp (number), TransactionIsolation (number) - object name: Catalina:j2eeType=Servlet,WebModule=//localhost/mono,name=default,J2EEApplication=none,J2EEServer=none
attributes: singleThreadModel (other) - object name: tomcat.jdbc:name=»jdbc/catalystone»,context=/mono,engine=Catalina,type=ConnectionPool,host=localhost,class=org.apache.tomcat.jdbc.pool.DataSource,connections=PooledConnection[6]
attributes: AutoCommit (boolean), Catalog (string), Closed (boolean), ConnectionVersion (number), Discarded (boolean), Holdability (number), Initialized (boolean), LastConnected (number), LastValidated (number), MaxAgeExpired (boolean), ReadOnly (boolean), Released (boolean), Schema (string), Suspect (boolean), Timestamp (number), TransactionIsolation (number)_
`
Maybe this can help you to understand and suggest something.