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 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥15 复杂网络,变滞后传递熵,FDA
  • ¥20 csv格式数据集预处理及模型选择
  • ¥15 部分网页页面无法显示!
  • ¥15 怎样解决power bi 中设置管理聚合,详细信息表和详细信息列显示灰色,而不能选择相应的内容呢?
  • ¥15 QTOF MSE数据分析
  • ¥15 平板录音机录音问题解决