我有一个Mule应用程序,它连接到一个Oracle数据库。该应用程序是一个SOAP API,允许执行SQL存储过程。我的连接器已经设置为使用连接池,并且我一直在监视这些连接。我最大的连接池大小为20,当调用数据库时,我可以看到它们正在打开(netstat -ntl | grep PORTNUMBER)。
tcp4 0 0 IP HERE OTHER IP HERE SYN_SENT
tcp4 0 0 IP HERE OTHER IP HERE ESTABLISHED
tcp4 0 0 IP HERE OTHER IP HERE ESTABLISHED
tcp4 0 0 IP HERE OTHER IP HERE ESTABLISHED
tcp4 0 0 IP HERE OTHER IP HERE ESTABLISHED
tcp4 0 0 IP HERE OTHER IP HERE ESTABLISHED
tcp4 0 0 IP HERE OTHER IP HERE ESTABLISHED
tcp4 0 0 IP HERE OTHER IP HERE ESTABLISHED
tcp4 0 0 IP HERE OTHER IP HERE ESTABLISHED
tcp4 0 0 IP HERE OTHER IP HERE ESTABLISHED
tcp4 0 0 IP HERE OTHER IP HERE ESTABLISHED
tcp4 0 0 IP HERE OTHER IP HERE ESTABLISHED
tcp4 0 0 IP HERE OTHER IP HERE ESTABLISHED
tcp4 0 0 IP HERE OTHER IP HERE ESTABLISHED
tcp4 0 0 IP HERE OTHER IP HERE ESTABLISHED
tcp4 0 0 IP HERE OTHER IP HERE ESTABLISHED
tcp4 0 0 IP HERE OTHER IP HERE ESTABLISHED
tcp4 0 0 IP HERE OTHER IP HERE ESTABLISHED
tcp4 0 0 IP HERE OTHER IP HERE ESTABLISHED
tcp4 0 0 IP HERE OTHER IP HERE ESTABLISHED
tcp4 0 0 IP HERE OTHER IP HERE ESTABLISHED
tcp4 10 0 IP HERE OTHER IP HERE ESTABLISHED
当电话结束时,我希望连接在一定时间后关闭,但事实并非如此。我注意到当应用程序在服务器上运行时,仍然保持着从七月开始(几个月前)的开放连接。到目前为止,我找到的唯一能够在几秒钟后关闭连接的方法是启用XA事务并设置连接超时。但是,这会完全破坏应用程序的性能,并且是不必要的开销。
我该如何在不使用XA连接的情况下添加这样的超时呢?我希望我的数据库连接在20秒内无活动后关闭。
谢谢
编辑: 使用通用数据库连接器-Mule版本3.8.0 我们允许最大连接数到数据库,我们有多个实例正在运行。这意味着连接由一个实例保留,这使得其他实例无法获取新连接。
我们遇到的具体问题是,即使上一次运行已经过去几周,某个实例仍然保留了120个连接。当第二个实例请求更多连接时,由于数据库侧的最大连接数为150,因此只能获得30个连接。