0

我有两个在 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 是否返回十万记录......?

4

2 回答 2

0

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

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

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

于 2013-08-20T09:24:54.807 回答
0

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

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

于 2013-08-20T09:34:06.510 回答