导入文件失败因Tomcat内存配置问题记录
客户反馈某些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服务,就可以导入成功了。
本文地址:https://blog.csdn.net/tianlangstudio/article/details/112016862