【发布时间】:2021-10-03 07:12:27
【问题描述】:
在服务重启后第一次调用 Apache TomCat 8.5.51 时,我随机收到以下错误。该错误会在一段时间后自动消失,这使得调试非常困难。
这可能是什么原因?
错误日志:
27-Jul-2021 13:40:44.965 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log ContextListener: attributeAdded('StockTicker', 'async.Stockticker@75f16954')
27-Jul-2021 13:41:03.686 SEVERE [http-nio-8080-exec-1] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [Cocoon] in context with path [/cocoon-2.1.11] threw exception [Servlet execution threw an exception] with root cause
java.lang.StackOverflowError
at org.apache.xml.utils.SuballocatedIntVector.<init>(SuballocatedIntVector.java:115)
at org.apache.xml.dtm.ref.DTMDefaultBase.<init>(DTMDefaultBase.java:207)
at org.apache.xml.dtm.ref.DTMDefaultBaseTraversers.<init>(DTMDefaultBaseTraversers.java:90)
at org.apache.xml.dtm.ref.DTMDefaultBaseIterators.<init>(DTMDefaultBaseIterators.java:85)
at org.apache.xml.dtm.ref.sax2dtm.SAX2DTM.<init>(SAX2DTM.java:253)
at org.apache.xml.dtm.ref.sax2dtm.SAX2DTM.<init>(SAX2DTM.java:224)
at org.apache.xml.dtm.ref.sax2dtm.SAX2RTFDTM.<init>(SAX2RTFDTM.java:126)
at org.apache.xml.dtm.ref.DTMManagerDefault.getDTM(DTMManagerDefault.java:307)
at org.apache.xpath.XPathContext.getRTFDTM(XPathContext.java:1258)
at org.apache.xpath.XPathContext.pushRTFContext(XPathContext.java:1275)
at org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:386)
at org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
at org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:248)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemChoose.execute(ElemChoose.java:141)
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)
【问题讨论】:
-
Javadocs 表示这主要是由递归问题引起的。由于错误是在 xalan 代码中引发的,并且堆栈跟踪中没有递归迹象,因此问题可能是 undersized
-Xss传递给了 JVM。 -
感谢您的回复。我不得不截断堆栈跟踪,因为它太长了。我将使用完整的堆栈跟踪更新答案。
-
现在可以在这些重复行中看到递归:
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400) org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:394)。 xml 结构中的某些东西可能会导致它。完整的堆栈跟踪可能有更多信息。 -
谢谢。我将它用于 XSLT 转换。有一个字符串替换功能似乎会导致这种情况。如果我删除它,那么我不会收到此错误。但是,我不明白的是..它第一次(或随机)发生并开始自行工作。可能是什么原因?
-
问题的根本原因是堆栈跟踪中的递归,我设法修复它。谢谢你的帮助。您可以将其总结为答案,
标签: java tomcat apache-fop xalan