在我们的一个环境中,有具有以下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