Tomcat遇到OracleTimeoutPollingThread错误

    启动Tomcat时遇到了OracleTimeoutPollingThread错误

    This is very likely to create a memory leak. Stack trace of thread:
   java.lang.Object.wait<Native Method>
   oracle.jdbc.driver.BlockSource
  java.lang.Thread.sleep<Native Method>
  oracle.jdbc.driver.OracleTimeoutPollingThread.run<OracleTimeoutPollingThread

    该错误很有可能是Oracle的会话数已经满了。

     查看一下程序所连接的数据库实例允许有多少个连接:

       

      select value from v$parameter where name ='processes';

      默认是150

     查看当前有多少个会话连接着这个实例:

          select count(*) from v$session;      

     

    如果发现允许的最大连接数是好几千,现在只连接了几百个,那么还有可能是总的数量很大,但是你所使用的这个用户被限制了最大连接数,比如给你限制了只允许100个。

   

    如果你tomcat程序中连接oracle的用户名是WEBDEMO,可以看看你这个用户一共站了多少个session

    select * from V$SESSION where username='WEBDEMO';


    如果要kill掉某些会话,可以使用

        alter system kill session '会话ID,序号';

         会话ID,序号怎么查询呢?

        例如下面的语句可以查询WEBDEMO这个用户的会话信息:

       select sid,serial#,username,status from V$SESSION where username='WEBDEMO';

        


       如果想批量删除oracle会话你似乎没有太好的选择,下面是相对好用的方法,例如批量删除WEBDEMO用户的处于非活跃状态的会话步骤是:

      1、执行语句:

    SELECT 'alter system kill session ''' || T.sid || '' || ',' || t.serial# || ''';',
  t.*
  from v$session t
  where username ='WEBDEMO' and status ='INACTIVE';


         得到结果:

     

    2、将每一行,第一列的内容(也就是红框里的内容)复制出来,当做命令执行,这样虽然不是真正意义上的批量,但是也是省了很多功夫。

           

        

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值