sunweiherber 2009-03-25 12:20
浏览 226
已采纳

tomcat out of memory 问题

我现在做的一个项目是struts+hibernate架构的
在大数据量检索时会出现out of memory的error我想捕获这经error
以下是代码
[code="java"]
try{
session = DBConnection.getSession();//Obtaining hibernate session

        //run this query and populate the query list
        search_DB = "select * from commonlogs";

        query = session.createQuery(search_DB);

        for(int i =0; i< params.length; i++)
        {
            if(params[i]==null)
                break;
            query.setString(i, params[i]);
        }

        query.setMaxResults(fetchSize);

        [color=red]returnValue = query.list();[/color]
    }
    catch(MyException ex){
        throw ex;
    }
    catch(Exception ex){
        throw new MyException (ErrorCodes.SQLEXCEPTION,ex);
    }
    //start add by sunwei 2009/03/05
    catch (Throwable e) {
                    logger.writeError(ErrorCodes.NONSPECIFIEDEXCEPTION, ResourceAccess.getErrorMessage(ErrorCodes.NONSPECIFIEDEXCEPTION), e);
        throw new MyException (ErrorCodes.NONSPECIFIEDEXCEPTION,new Exception(e.toString()));//也是输出log
    }
    //end add by sunwei 2009/03/05
    finally{
        try
        {
            DBConnection.releaseResources(session);//Closing session
        }
        catch(MyException ex){
            throw ex;
        }
    }

[/code]
上一层捕获MyException的话,会跳转到GlobalErrors.jsp(错误页面)

[color=red]returnValue = query.list();[/color]执行时会out of memory

struts-config.xml
[code="java"]

key="key.excepion"
type="javax.servlet.ServletException"
path="/jsp/GlobalErrors.jsp"/>

     <exception 
     key="key.excepion"
     type="java.lang.NullPointerException"
     path="/jsp/GlobalErrors.jsp"/>

     <exception
      key="key.excepion" 
      type="java.lang.Exception"
      path="/jsp/GlobalErrors.jsp"/>         


[/code]
不能输出log,但会跳转到GlobalErrors.jsp(错误页面)
我用的log机制是log4j,其它异常(比如数据库连接失败等)都会输出log,就是out of memory不能.
谁能帮我看看是什么原因.
[b]问题补充:[/b]
谢谢大家的回答!
调高JVM的内在确实可以减少out of memory的发生,这个我以前调查过.
我说一下这个程序发生out of memory原因:主要是一次从数据库中检索出100万条记录造成的,我也不想这样做查询的,但是程序已经是不能改了,只想知道原因.
既然throwable不能捕获out of memory这个error,那什么程序又可以跳转到GlobalErrors.jsp(错误页面) 呢?能不能帮我分析一下.已经加分了.
[b]问题补充:[/b]
为什么程序又可以跳转到GlobalErrors.jsp(错误页面) 呢?

  • 写回答

6条回答 默认 最新

  • playfish05 2009-03-26 09:31
    关注

    程序被异常终止,框架的执行流程被停止捕获到了错误,所以可以跳向globalerror.jsp.如果你的异常可以大到让jvm崩溃,或者让框架无法执行流程,那才会什么都看不到.处理良好的框架都会对框架自身无法保证的错误进行这样的保障机制.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥15 Python3.5 相关代码写作
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗