我在我的应用程序中运行几个月后面临一个问题: 我在WebSphere Application Server中配置了连接池,但没有最大连接数为20,最小连接数1,收获时间180秒,未使用时间1800秒,数据源(oracle)中的老化超时0秒用于我的应用程序。 从前几天我们看到一个问题,突然在早上我们开始在应用程序中获取超时,然后出现一个奇怪的行为,我们没有得到任何异常,但用于运行过程的可调用语句返回零结果,即使所有执行数据在数据库中。数据库中总会话的数量与websphere中的连接池中设置的数据库不相同
问题开始发生时,系统输出或系统错误日志中没有例外。我们能看到的例外是一个陈旧的连接异常和数据库会话杀例外
java.sql.SQLRecoverableException: ORA-00028: your session has been killed
ORA-00028: your session has been killed
但是这件事发生6小时应用程序超时之前。
而且在检查中没有数据库连接,我们可以看到只有9届在那里虽然我们已经配置的连接池20中使用下面的查询,以检查TOTAL_CON:
SELECT s.machine
, s.username
, count(decode(s.STATUS, 'ACTIVE', 1)) as active_con
, count(decode(s.STATUS, 'INACTIVE', 1)) as inactive_con
, count(*) as total_con
FROM v$session s
WHERE type <> 'BACKGROUND'
GROUP BY username, machine
ORDER BY total_con DESC;
我们做了一个WAS服务器重启并解决了这个问题,并且还将数据库中的会话数量增加到了20.
所以我有两个问题: 1.什么会导致应用程序端的ORA-00028,因为数据库团队说没有会话从他们身边被杀死。 2.数据库中的总会话数是否少于数据源中配置的最大连接数是否正常,如果不是,则会导致此问题。
您已经将连接池配置为拥有最多20个连接,因此在某个点上只有9个连接并不一定看起来很奇怪。如果一个会话被杀死了,那是从服务器端发生的。如果DBA没有手动杀死一个,那么可能是资源限制导致会话被自动终止?有没有比平常少的流量,所以一些会议闲置(你没有提到保持活力),导致听众或数据库或防火墙放弃它们?是否有网络问题导致甲骨文认为客户已经死亡? –
连接超时设置为180秒。我不认为这是因为资源限制发生的,因为它发生在凌晨3点左右,当时流量最小。你提到“如果一个会话被杀死了,那是从服务器端发生的事情”,那么这是什么原因造成的呢? – Neel
我仍在检查是否有一些防火墙的TCP超时时间少于收割时间。在此期间也没有发现网络问题 – Neel