Oracle session 超过最大数问题,困扰很久了
系统情况:oracle+weblogic9.2
b/s结构,数据库服务器配置为ibm3550,操作系统为windows 2003 server,大约有200左右客户端,不一定同时用。
问题:
Oracle的session怎么总是超过最大数,之后就不能登陆了,提示“ORA-00018:maximum number of sessions exceeded”
重启后,只能坚持一天,真郁闷!
测试时,oracle是能够自动释放废弃的连接啊,周期大约2小时一释放,怎么在客户那里就不行了,曾经坚持过一个月,最近是频繁出现,郁闷死了!
试了好多办法,最终也没有得到解决,请高手指点
试用过的方法有:
1、将最大数改为600,甚至1000
2、将数据库连接改为“共享服务器模式”,共享连接参数为:
调度程序数:5
每个调度程序的最大连接数:100
最大调度程序数:5
最大服务器进程数:600
3、内存方面
共享池:256M
缓冲区高速缓存:48M
大型池:128M
Java池:64M
PGA目标:64M
------解决方案--------------------你的代码对session都有进行释放?
------解决方案--------------------oracle是可以进行自动释放,但由于你设置的超时比较长,到了客户那连接数一多,session一直没被释放掉,的确是很容易就超出限制(你检查一下你的代码的释放)
------解决方案--------------------查看一下profile的connect_time和idle_time
------解决方案--------------------首先你得必须查询v$session,了解都是哪些程序连接到oracle,然后才好判断下一步如何操作。
------解决方案--------------------可以肯定的说百分之百是WEBLOGIC的问题
是它没有及时的释放掉SESSION。
出问题的时候最好检查一下WEBLOGIC是否有问题?
不知道你是否启用了连接池呢?
------解决方案--------------------sql>show parameter processes
看看processes这个参数设置的是多少? 如果少于200,请加大之
------解决方案--------------------
1.报错出来的超过session 最大数,那是数据库层的设置。若果你的资源允许,而你的当前process 数过小,那么你可以适当增大processs 数( session 数依赖于process数,一般不去直接修改session数).
2.weblogic 是使用连接池的,只要设置连接池中的连接数为最大的并发用户数即可。在一定设置下,当某时刻的前台请求过多,找不到一个idle 的连接来为请求服务时,此时weblogic 会自动增加对数据库的连接。
基于你说重启后问题消失,我想你的情况多半是这种了:请求相对过多,或者对请求的处理很慢(有效率问题),导致在没有idle 的连接来前台请求服务时,连接池自动增加对数据库连接,这种增长到一定程度,超过了数据库的session 设置,因而报错。
------解决方案--------------------估计是应用程序的问题,可能没有关闭连接!
------解决方案--------------------一定要检查连接是否正确释放了
------解决方案--------------------
种种情况多半是应用程序造成的,由于系统在处理正常情况或者异常情况时考虑不周全,
造成连接没有释放,积累下来就会有10楼所说的情况。
当然也可能你的峰值访问量真的达到了或者查过了连接池的设置。
但是按照楼主所说,这种情况应该不太可能发生。
我觉得:
1、检查应用程序的代码,不知要差正常结束,还要认真分析各种异常情况下是否关闭了连接。
2、分析weblogic的连接池管理,是否存在漏洞。
------解决方案--------------------既然都是weblogic的,我不知道它是否和websphere一样有连接管理,应该有吧。那就在上面设置即可。
反正存在的问题 非此即彼,排除一下就可以解决掉。