我在Tomcat 7.0.5中运行了两个Web项目。 1st Project承载第二个项目中使用的服务(Web服务)。 两个项目都将数据库分开,但是在相同的Mysql Server实例上。 使用的技术是Spring,Hibernate。数据库是Mysql。服务器是Apache Tomcat 7.0.5 最初的转换工作正常。 随着更多记录(1-2万亿)被添加到数据库,它开始在线程“ajp-9009-AsyncTimeout”中给出OutOfMemoryError异常和异常java.lang.OutOfMemoryError:Java堆空间错误。 我搜索了错误,根据解决方案解释我更新了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是否返回Lakhs of Record ..?
答案 0 :(得分:0)
如果没有具体细节,很难确定您的问题。
我会查看像YourKit这样的工具来分析你的应用程序(你可以获得30天的免费试用版,ISTR)和VisualVM来挖掘你的JVM。
但是,如果您的webservice获取了100,000条记录,则将它们呈现为XML / JSON并在一个请求/响应中将它们发送出去,然后从数据库中提取大量数据,马歇尔和传递。我会调查那个设计,看看这是否是根本问题。
答案 1 :(得分:0)
当您使用ORM工具处理数据库重新连接操作时,您可以将批量提交限制为最佳,而不会阻止OutOfMemoryError。
另一种可能的情况,我不确定。这可能由于JDBC驱动程序而发生。如果可能的话,尝试使用更新的jdbc驱动程序jar。