¿Por qué mi Tomcat solo abre 8 conexiones JDBC?
Al configurar las conexiones de la base de datos en Tomcat 8, por alguna razón, Tomcat no sigue lo que configuré en context.xml, con el resultado de que me quedé sin conexiones, lo que genera contenciones de recursos en el lado del servidor de aplicaciones (subprocesos BLOQUEADOS / EN ESPERA) ) Siempre tengo 8 conexiones (mostrar lista de procesos en mariadb / mysql) después de que se inicializa el grupo. Mi configuración establece un mínimo de 10 conexiones y un máximo de 100 conexiones.
Probé diferentes configuraciones, pero esto no hace ninguna diferencia, lo cual es extraño al menos. Se usa context.xml; de lo contrario, no podría conectarse a la base de datos.
¿Que está sucediendo aquí? ¿Por qué solo 8 conexiones?
Versiones de software: - Controlador JDBC de MySQL: más reciente (5.1.35) - Java 1.8.0_05
También observé con mi configuración anterior: Tomcat 7, Java 1.7, controladores JDBC MySQL anteriores, MySQL en lugar de MariaDB. Entonces, el problema no parece directamente relacionado con la versión.
Mostrar salida de la lista de procesos (mostrando los 8 procesos):
| Id | User | Host | db | Command | Time | State | Info | Progress |
+-------+---------------+---------------+-------------------+---------+------+-----------+-----------------+----------+
| 71153 | root | localhost | vnitdatacollector | Query | 0 | init | show processlist| 0.000 |
| 73473 | vnit_datacoll | virt005:58585 | vnitdatacollector | Sleep | 0 | | NULL | 0.000 |
| 73474 | vnit_datacoll | virt005:58586 | vnitdatacollector | Sleep | 0 | | NULL | 0.000 |
| 73482 | vnit_datacoll | virt005:58606 | vnitdatacollector | Query | 0 | update | INSERT INTO ... | 0.000 |
| 73483 | vnit_datacoll | virt005:58607 | vnitdatacollector | Sleep | 0 | | NULL | 0.000 |
| 73485 | vnit_datacoll | virt005:58618 | vnitdatacollector | Query | 0 | query end | INSERT INTO ... | 0.000 |
| 73487 | vnit_datacoll | virt005:58624 | vnitdatacollector | Sleep | 0 | | NULL | 0.000 |
| 73488 | vnit_datacoll | virt005:58634 | vnitdatacollector | Sleep | 0 | | NULL | 0.000 |
| 73489 | vnit_datacoll | virt005:58637 | vnitdatacollector | Query | 7 | update | INSERT INTO ... | 0.000 |
+-------+---------------+---------------+-------------------+---------+------+-----------+-----------------+----------+
Tengo la siguiente configuración context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource
name="jdbc/dbaccess"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="100"
minIdle="10"
maxWait="1000"
initialSize="10"
minEvictableIdleTimeMillis="5000"
testOnBorrow="true"
validationQuery="SELECT 1"
timeBetweenEvictionRunsMillis="5000"
testWhileIdle="true"
removeAbandoned="true"
removeAbandonedTimeout="60"
logAbandoned="true"
username="some_user"
password="{the password}"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://dbserver:3306/dbaccess?useFastDateParsing=false&jdbcCompliantTruncation=false"
/>
<Resource
name="mail/emailconnection"
auth="Container"
type="javax.mail.Session"
mail.smtp.host="some.stmp.server"
/>
</Context>
El siguiente problema de subproceso aparece luego de un período (corto):
"Thread-495" #517 daemon prio=5 os_prio=0 tid=0x00007f678c040800 nid=0x1642 waiting on condition [0x00007f67848f4000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000f21933f0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at org.apache.tomcat.dbcp.pool2.impl.LinkedBlockingDeque.takeFirst(LinkedBlockingDeque.java:582)
at org.apache.tomcat.dbcp.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:439)
at org.apache.tomcat.dbcp.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:360)
at org.apache.tomcat.dbcp.dbcp2.PoolingDataSource.getConnection(PoolingDataSource.java:118)
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1412)
at com.hipersonik.util.ServiceLocator.getConnection(ServiceLocator.java:32)