【问题标题】:Java "ajp-9009-AsyncTimeout" java.lang.OutOfMemoryError: Java heap space ErrorsJava“ajp-9009-AsyncTimeout”java.lang.OutOfMemoryError:Java 堆空间错误
【发布时间】:2013-08-22 06:53:05
【问题描述】:

我有两个在 Tomcat 7.0.5 中运行的 Web 项目。 第一个项目托管第二个项目中使用的服务(Web 服务)。 这两个项目都有单独的数据库,但在同一个 Mysql Server 实例上。 使用的技术是 Spring、Hibernate。数据库是Mysql。服务器是 Apache Tomcat 7.0.5 最初一切工作正常。 随着更多记录(1-20 万)被添加到数据库中,它开始在线程“ajp-9009-AsyncTimeout”java.lang.OutOfMemoryError:Java 堆空间错误中给出 OutOfMemoryError 异常和异常。 我搜索了错误,根据解释的解决方案我更新了 Catalina.bat 文件如下

set JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 
-server -Xms1536m -Xmx1536m
-XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m 
-XX:MaxPermSize=256m -XX:+DisableExplicitGC"

set CATALINA_OPTS=-server -Xms256m -Xmx1024m

但对我没有任何帮助。 如何摆脱上述错误..? 我做错什么了吗..? 而且我还有一个查询,WebService 是否返回十万记录......?

【问题讨论】:

  • 对于外行,10 万 = 100,000

标签: java spring hibernate jakarta-ee tomcat


【解决方案1】:

没有具体细节,就很难确定您的问题。

我会使用 YourKit 之类的工具来分析您的应用程序(您可以获得 30 天免费试用版,ISTR)和 VisualVM 来深入了解您的 JVM。

但是,如果您的网络服务获取您的 100,000 条记录,将它们呈现为 XML/JSON 并在一个请求/响应中发送出去,那么需要从数据库、编组和发送。我会调查那个设计,看看这是否是根本问题。

【讨论】:

    【解决方案2】:

    当您使用 ORM 工具处理与数据库相关的操作时,您可以将批量提交限制在不会阻止 OutOfMemoryError 的最佳状态。

    另一种可能的情况,我不确定。这可能是由于 JDBC 驱动程序而发生的。如果可能,请尝试使用更新的 jdbc 驱动程序 jar。

    【讨论】:

      猜你喜欢
      • 2016-01-19
      • 2018-04-09
      • 1970-01-01
      • 2016-04-10
      • 1970-01-01
      • 2020-09-25
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      相关资源
      最近更新 更多