Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将MS SQL 2005 DB与Tomcat 6一起使用时出现Java内存不足错误_Java_Sql Server 2005_Tomcat6_Out Of Memory_32 Bit - Fatal编程技术网

将MS SQL 2005 DB与Tomcat 6一起使用时出现Java内存不足错误

将MS SQL 2005 DB与Tomcat 6一起使用时出现Java内存不足错误,java,sql-server-2005,tomcat6,out-of-memory,32-bit,Java,Sql Server 2005,Tomcat6,Out Of Memory,32 Bit,我正在开发一个基于java的web应用程序,它使用Tomcat6作为web服务器。通常情况下,我们有一个MySQL后端,但对于一些实例,我们需要使用MS SQL为我们的客户机提供服务。在对其中一个MS SQL实例执行最新升级时,我开始在访问web应用程序的某些页面时出现java内存不足错误。通常在返回较大的结果集时发生,但并不总是如此 我没有在与我的PC上的本地实例相同的web应用程序设置中收到此错误,这使我相信这是一个环境问题。我在Tomcat6配置中尝试了许多不同的Java设置,但没有解决问

我正在开发一个基于java的web应用程序,它使用Tomcat6作为web服务器。通常情况下,我们有一个MySQL后端,但对于一些实例,我们需要使用MS SQL为我们的客户机提供服务。在对其中一个MS SQL实例执行最新升级时,我开始在访问web应用程序的某些页面时出现java内存不足错误。通常在返回较大的结果集时发生,但并不总是如此

我没有在与我的PC上的本地实例相同的web应用程序设置中收到此错误,这使我相信这是一个环境问题。我在Tomcat6配置中尝试了许多不同的Java设置,但没有解决问题

该环境是一台32位机器,内存为4GB。 我已使用以下配置Tomcat 6: -XX:MaxPermSize=512m -Xnoclassgc 初始内存池:1024 最大内存池:1024

我也尝试过增加MaxPermSize,但这会导致Tomcat无法启动

此外,我还尝试将-Xms-Xmx分别设置为256m和512m,等等

我的本地机器是64位的,带有4GB内存。 我已使用以下配置Tomcat 6: -XX:MaxPermSize=512m -Xnoclassgc 初始内存池:1024 最大内存池:1024

这可能是新升级中SQL语句的问题吗? 我不相信这种情况,因为错误不会发生在我的本地实例上。我相信这与环境有关,但我无法找出问题所在

有人有什么建议吗

以下是记录的错误:

2012-09-19 11:44:54,745 [ http-80-7] ERROR org.apache.jsp.siteManager.util.error_jsp: javax.servlet.ServletException: java.lang.OutOfMemoryError: unable to create new native thread
at org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:862)
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
at org.apache.jsp.doc.doc.index_jsp._jspService(index_jsp.java:1106)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
at com.djinnsoft.jade.sitetree.Sitetree.forward(Sitetree.java:405)
at com.djinnsoft.jade.sitetree.Sitetree.forward(Sitetree.java:344)
at com.djinnsoft.jade.sitetree.RootServlet.service(RootServlet.java:124)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.springboard.ram.report.ReportSecurityFilter.doFilter(ReportSecurityFilter.java:70)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:555)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:861)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1584)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Unknown Source)
at com.microsoft.sqlserver.jdbc.TimeoutTimer.start(Unknown Source)
at com.microsoft.sqlserver.jdbc.TDSCommand.startResponse(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(Unknown Source)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeQuery(Unknown Source)
at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208)
at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208)
at com.djinnsoft.jade.data.record.SQLUtil.ExecuteQuery(SQLUtil.java:236)
at com.djinnsoft.jade.data.record.SQLUtil.ExecuteQuery(SQLUtil.java:207)
at com.djinnsoft.jade.data.record.RecordSource.find(RecordSource.java:184)
at com.djinnsoft.jade.data.record.RecordSource.find(RecordSource.java:148)
at com.djinnsoft.jade.content.data.DatabaseContentSource.createVersions(DatabaseContentSource.java:804)
at com.djinnsoft.jade.content.data.DatabaseContentSource.access$2900(DatabaseContentSource.java:42)
at com.djinnsoft.jade.content.data.DatabaseContentSource$8.process(DatabaseContentSource.java:747)
at com.djinnsoft.jade.data.record.SQLEnvironment.execute(SQLEnvironment.java:70)
at com.djinnsoft.jade.content.data.DatabaseContentSource.findImpl(DatabaseContentSource.java:672)
at com.djinnsoft.jade.content.GenericContentSource.findImpl(GenericContentSource.java:1077)
at com.djinnsoft.jade.content.GenericContentSource.find(GenericContentSource.java:1186)
at com.djinnsoft.jade.content.GenericContentSource.find(GenericContentSource.java:1200)
at com.djinnsoft.jade.content.GenericContentSource.find(GenericContentSource.java:1025)
at com.djinnsoft.jade.content.taglib.ContentBaseTag.findItem(ContentBaseTag.java:166)
at com.djinnsoft.jade.content.taglib.ContentTag.doStartTag(ContentTag.java:500)
at org.apache.jsp.doc.doc.index_jsp._jspx_meth_content_005faction_005f12(index_jsp.java:7637)
at org.apache.jsp.doc.doc.index_jsp._jspx_meth_c_005fforEach_005f6(index_jsp.java:6299)
at org.apache.jsp.doc.doc.index_jsp._jspx_meth_c_005fotherwise_005f3(index_jsp.java:4816)
at org.apache.jsp.doc.doc.index_jsp._jspx_meth_c_005fchoose_005f3(index_jsp.java:4395)
at org.apache.jsp.doc.doc.index_jsp._jspx_meth_c_005fotherwise_005f2(index_jsp.java:4363)
at org.apache.jsp.doc.doc.index_jsp._jspx_meth_c_005fchoose_005f2(index_jsp.java:4278)
at org.apache.jsp.doc.doc.index_jsp._jspx_meth_forms_005fpopulateResult_005f0(index_jsp.java:4244)
at org.apache.jsp.doc.doc.index_jsp._jspService(index_jsp.java:961)
... 32 more
2012-09-19 11:44:54745[http-80-7]错误 org.apache.jsp.siteManager.util.error\u jsp: javax.servlet.ServletException:java.lang.OutOfMemoryError:无法 创建新的本机线程

这通常表示您在本机内存中获得了OOM,而不是java堆。这意味着操作系统无法分配线程。
这可能意味着:

  • 您运行的线程太多,并且超出了某些操作系统限制(您使用的64位计算机的线程限制与32位计算机的不同)或

  • 您的一个线程在初始化和初始化时使用了太多内存 崩溃(我无法更准确地描述这一点)


你说你不能复制这个,但这可能是,为了在本地复制这个,你没有web服务器的负载吗?我的意思是,也许在部署的服务器实例中,负载太重,并发请求太多(太多应用程序线程?),这导致了崩溃

好的,我找到了问题的解决方案。在我们新版本的web应用程序中,有一个上下文参数限制结果集的显示大小,并按该限制对结果集进行分页。正如我前面所说,这个问题似乎只发生在更大的结果集上。MySQL后端的默认设置为500,但显然MS SQL后端需要将其设置得更低。将其设置为20可消除内存不足错误。感谢所有提供建议的人。非常感谢。

您看到了吗?如果在阅读了Martin链接的内容后,您仍然不走运,请尝试以下选项“-Xms512M-Xmx1024M-XX:MaxPermSize=256M”–Xmx1024M有时对我来说不够,我需要2G:(在一个大的、漂亮的、定制的报表和报表所需的内部存储对象上。好的,尝试设置-Xss128M,就像马丁建议的链接一样,但不起作用。然后我尝试了D3mon-1stVFW建议的选项,也没有运气。现在,可能只有我。我正在使用配置Tomcat设置这些。这是正确的吗?还是应该设置为t通过Java控制面板将其作为运行时参数。我在哪里设置它们很重要吗?对不起,上面应该有-Xss128k。我如何确认这一点?它会记录在服务器事件日志中吗?Catalina日志?非常感谢您的任何建议。这很难说。从您的应用程序日志以及可能的Catalina日志中,您应该能够找到t、 如果您的服务器负载过重。如果是,您可以尝试在32位系统而不是当前的64位系统中本地执行应用程序的压力运行。此外,OOM还生成堆转储。您是否使用工具检查过该转储文件?感谢Cratylus的建议,非常感谢,但我已经找到了c因为这个问题。