在我们的一种环境中,tomcat 8具有以下JDBC数据源配置:
<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数据源属性:
numActive = 0
numIdle = 5
这些结果在几天内也保持稳定。
tomcat似乎创建了JDBC连接池,其初始大小为5个连接,将空闲连接的数量保持为5个,但是由于某些原因,netstat显示的已建立连接的数量大了11倍。
当context.xml中的minIdle =“ 5”和JMX显示numActive + numIdle = 5时,netstat也应该显示5个已建立的连接,不是吗?
我想在维持JDBC池的同时,tomcat会不断打开和关闭与数据库的连接,从netstat的角度来看,它们保持ESTABLISHED状态直到被数据库删除。
我的问题是如何更改tomcat数据源配置以使netstat输出与此配置一致?
非常感谢您。
答案 0 :(得分:0)
这里有些事情要看:
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?也许您正在监视this,但这不是您想要的。
要每隔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