客户反馈某些Excel导入失败,在测试环境却可以正常导入,以此判断应该跟Tomcat内存设置有关.
查看客户环境Tomcat日志,发现报错信息:
java.lang.OutOfMemoryError: Java heap space
at org.apache.xmlbeans.impl.store.Cur.createElementXobj(Cur.java:260) at org.apache.xmlbeans.impl.store.Cur$CurLoadContext.startElement(Cur.java:2997)
at org.apache.xmlbeans.impl.store.Locale$SaxHandler.startElement(Locale.java:3164) at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
at org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source) at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
从报错信息看,很可能是Tomcat设置的内存小了,但测试环境和客户环境使用的配置是一样的,怎么会一个有问题一个没问题呢?经确认是启动方式不同:
测试环境是通过执行bin/startup.bat启动的而客户环境是使用的服务方式运行的.虽然在bin/catalina.bat中配置了jvm大小:

但是这种方式的配置对已服务方式运行的Tomcat并没有效果,那怎么设置服务运行的Tomcat的JVM大小呢?可以通过修改注册表:
\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Apache Software Foundation\Procrun 2.0\对应tomcat服务名称\Parameters\Java

其中JvmMs和JvmMx分别对应Tomcat启动Java虚拟机的初始内存和可用最大内存。修改完成后重启Tomcat服务,就可以导入成功了。

客户反馈的Excel导入问题源于Tomcat内存不足,表现为Java堆空间错误。尽管测试环境与客户环境配置相同,但由于启动方式不同导致问题出现。测试环境通过startup.bat启动不受内存配置影响,而客户环境使用服务方式运行,需修改注册表中对应Tomcat服务的Java内存设置。具体操作为调整HKEY_LOCAL_MACHINESOFTWAREWOW6432NodeApacheSoftwareFoundationProcrun2.0对应服务名ParametersJava下的JvmMs和JvmMx参数,重启服务后问题解决。
1185

被折叠的 条评论
为什么被折叠?



