Tomcat JDBC 连接量与 netstat 已建立的连接



在我们的一个环境中,有具有以下JDBC数据源配置的tomcat 8:

<Resource   name="jdbc/mydatasource"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@myhostname:1521:dbname"
username="username"
password="password"
removeAbandoned="false"
removeAbandonedTimeout="300"
logAbandoned="true"
initialSize="5"
maxActive="100"
maxIdle="100"
minIdle="5"
maxWait="120000"
/>

Netstat 命令返回以下结果:

netstat -anu | grep ${pid}| grep ESTABLISHED | grep ${myhostname}:1521 | wc -l

55

该结果在几天内保持稳定。

同时,我通过JMX监视tomcat数据源属性:

活动数 = 0

空闲数 = 5

这些结果在几天内也保持稳定。

看起来tomcat创建了初始大小为5个连接的JDBC连接池,将空闲连接数保持在5,但由于某些原因,netstat显示的已建立连接数是其11倍。

当 minIdle="5" 在上下文中.xml并且 JMX 显示 numActive+numIdle=5 netstat 也应该显示 5 个已建立的连接,不是吗?

我想在维持 JDBC 池时,tomcat 会不断打开和关闭与数据库的连接,从 netstat 的角度来看,这些连接一直处于 ESTABLISHED 状态,直到被数据库删除。

我的问题是如何更改 tomcat 数据源配置以使 netstat 输出与此配置一致?

提前非常感谢你。

这里有一些事情需要注意:
1(你的netstat命令只查看UDP连接(-u(,这不是你想要的。请改用:

netstat -ant | grep -c "${myhostname}:1521.*ESTABLISHED"
# -ant : all, numerical outptut, TCP connections
# grep -c : returns count of matches
# no need to grep PID unless you have more than one tomcat instance,
#  just matching host:1521 is enough.

2( 已建立连接的本地端口是否在更改?如果是,则由池维护人员主动打开和关闭连接。
3( DBCP JMX 配置是否正确?也许您正在监视此内容,而不是您想要的。

要每 1 秒连续观察一次变化,请使用:

watch -n1 "netstat -ant | grep ':1521.*ESTABLISHED' | nl | tail -n 5"
11  tcp        0      0 192.168.1.7:50890       172.17.0.23:1521     ESTABLISHED
12  tcp        0      0 192.168.1.7:58192       172.17.0.23:1521       ESTABLISHED
13  tcp        0      0 192.168.1.7:54224       172.17.0.23:1521        ESTABLISHED
14  tcp        0      0 192.168.1.7:34500       172.17.0.23:1521     ESTABLISHED
15  tcp        0      0 192.168.1.7:54888       172.17.0.23:1521      ESTABLISHED

最新更新