多个人同时访问页面出现了问题,好象是OUT OF MEMORY。
另外,有大型网站经验的朋友请谈谈注意事项。
比如大数据量的数据库查询,在写代码时候要注意什么。紧急求援。

解决方案 »

  1.   

    1数据库连接池
    2上传文件内存使用太大,建议用时间换取空间(解析表单域)
    3利用js减轻服务器负担
    4对于大字段建议用流打开不要直接写到内存里
    5数据库查询尽量不要用union
    战时想到这么多
      

  2.   

    如果你用的是 MySQL 数据库,用的是 ConnectorJ 做 JDBC Driver,那么,请特别注意我下面说的问题:在做一个数据库查询的时候,一定要通过适当的条件(或者用 LIMIT)让结果集尽量地小。比如,你一个页面要显示 20 条查询结果,就要用 LIMIT 限制结果集里只有 20 条记录。千万别不作任何限制,然后用 rs.next() 取前面的 20 条,后面的就不理它了。如果你这样做,虽然结果好像差不多,但是,JDBC Driver 事实上在你取第一条记录的时候,就已经把结果集里所有的记录都取下来放在内存里了,很容易就 out of memory 了。
      

  3.   

    最新的问题如下:
    多个人同时点一个页面,LOG里的错误信息如下:2006/09/05 15:08:09 ERROR [http-8080-Processor13] (ApplicationDispatcher.java/704) -Servlet.service() for servlet jsp threw exception
    javax.servlet.jsp.JspException: Cannot find bean: "list" in any scope
    at org.apache.struts.taglib.TagUtils.lookup(TagUtils.java:935)
    at org.apache.struts.taglib.logic.IterateTag.doStartTag(IterateTag.java:232)
    at org.apache.jsp.jsp.qans.admin.tiles.QuickAnswerHtmlBody_jsp._jspService(QuickAnswerHtmlBody_jsp.java:382)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:574)
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:499)
    at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:966)
    at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:614)
    at org.apache.struts.tiles.TilesUtilImpl.doInclude(TilesUtilImpl.java:99)
    at org.apache.struts.tiles.TilesUtil.doInclude(TilesUtil.java:135)
    at org.apache.struts.taglib.tiles.InsertTag.doInclude(InsertTag.java:760)
    at org.apache.struts.taglib.tiles.InsertTag$InsertHandler.doEndTag(InsertTag.java:892)
    at org.apache.struts.taglib.tiles.InsertTag.doEndTag(InsertTag.java:462)
    at org.apache.jsp.jsp.tiles.admin.layouts.mainLayout_jsp._jspx_meth_tiles_insert_1(mainLayout_jsp.java:278)
    at org.apache.jsp.jsp.tiles.admin.layouts.mainLayout_jsp._jspService(mainLayout_jsp.java:146)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:574)
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:499)
    at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:966)
    at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:614)
    at org.apache.struts.tiles.TilesUtilImpl.doInclude(TilesUtilImpl.java:99)
    at org.apache.struts.tiles.TilesUtil.doInclude(TilesUtil.java:135)
    at org.apache.struts.taglib.tiles.InsertTag.doInclude(InsertTag.java:760)
    at org.apache.struts.taglib.tiles.InsertTag$InsertHandler.doEndTag(InsertTag.java:892)
    at org.apache.struts.taglib.tiles.InsertTag.doEndTag(InsertTag.java:462)
    at org.apache.jsp.jsp.qans.admin.main.QuickAnswerHtmlMain_jsp._jspx_meth_tiles_insert_0(QuickAnswerHtmlMain_jsp.java:146)
    at org.apache.jsp.jsp.qans.admin.main.QuickAnswerHtmlMain_jsp._jspService(QuickAnswerHtmlMain_jsp.java:97)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
    at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085)
    at org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:263)
    at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398)
    at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:318)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    at jp.co.nec.necst.ebiz.base.EbizActionServlet.doPost(EbizActionServlet.java:124)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    at java.lang.Thread.run(Thread.java:595)
    2006/09/05 15:08:09 ERROR [http-8080-Processor13] (InsertTag.java/922) -ServletException in '/jsp/qans/admin/tiles/QuickAnswerHtmlBody.jsp': Cannot find bean: "list" in any scope
    org.apache.jasper.JasperException: Exception in JSP: /jsp/qans/admin/tiles/QuickAnswerHtmlBody.jsp:188185:  <div align="right">
    186:  <input type="button" class="btn"  value="&#12539;&#65405;&#65415;隠&#12539;&#65405;&#12539;&#65405;&#12539;&#65405;" onclick="javaSrcipt:append();" />
    187:  </div>
    188:  <logic:iterate name="list" id="list">
    189:  <a href="#" onclick="JavaScript:_sortIdOnClick('<bean:write name="list" property="chapterId"/>');"><bean:write property="txtChapterTitle" name="list" />&nbsp;</a>
    190: 
    191:  <input type="button" class="btn"  value="&#12539;&#65405;尞&#12539; onclick="JavaScript:deleted('<bean:write name="list" property="chapterId" />');" />
      

  4.   

    mater789(小白) ( ) 信誉:100    Blog  2006-09-05 11:43:00  得分: 0  
     
     
       1数据库连接池
    2上传文件内存使用太大,建议用时间换取空间(解析表单域)
    3利用js减轻服务器负担
    4对于大字段建议用流打开不要直接写到内存里
    5数据库查询尽量不要用union
    战时想到这么多
    ========================
    接一条,增加Web Container的内存。
    我一直是Tomcat+IIS,默认Tomcat是64M内存,经常报OUT OF MEMORY错误,后来增加到256M就好了。 
     
      

  5.   

    Servlet.service() for servlet jsp threw exception
    javax.servlet.jsp.JspException: Cannot find bean: "list" in any scope
    at org.apache.struts.taglib.TagUtils.lookup(TagUtils.java:935)
    at org.apache.struts.taglib.logic.IterateTag.doStartTag(IterateTag.java:232)
    at org.apache.jsp.jsp.qans.admin.tiles.QuickAnswerHtmlBody_jsp._jspService这个是你放在application,session,requset,page中的某个范围内的Attribute的值没有
    检查你写的页面跳转的时候是不是用的sendRidrect()或是你的存放属性的地方是不是提前关闭了供参考
      

  6.   

    再补充说明:
    框架是:
    spring + hibernate + structs
      

  7.   

    同志,只要你不是一开始就搞Java就好办,数据结构里有无数方法解决性能问题.如果你没有看不起念书时候的过期课本,答案就在里面.
    渠问中流清几许,惟有源头生活水.
      

  8.   

    程序上的问题 内存泄露 出现这种情况的原因很多 比如说数据库连接没有关闭,一次性读进内存的数据太多(比如说select * from table) 或者是无限的创建对象
      

  9.   

    程序不出问题的情况下造成内存溢出无非是数据量过大,查询大批量数据时可以采用分批查询的方式。不要一次把所有数据都select出来,可以按照页面的分页进行分批次查询。
      

  10.   

    1数据库连接池
    2上传文件内存使用太大,建议用时间换取空间(解析表单域)
    3利用js减轻服务器负担
    4对于大字段建议用流打开不要直接写到内存里
    5数据库查询尽量不要用union
    战时想到这么多
    ========================
    接一条,增加Web Container的内存。
    我一直是Tomcat+IIS,默认Tomcat是64M内存,经常报OUT OF MEMORY错误,后来增加到256M就好了。
      

  11.   

    其实是所谓的线程安全问题。
    比如,我在action里定义一个全局变量,
    在很多人访问页面的时候,会有问题。
    希望大家开发的时候注意,绝对不要用全局量。
      

  12.   

    1数据库连接池
    2上传文件内存使用太大,建议用时间换取空间(解析表单域)
    3利用js减轻服务器负担
    4对于大字段建议用流打开不要直接写到内存里
    5数据库查询尽量不要用union这位哥哥说的很好,我再补充一点
    多用预处理