【问题标题】:Java webapp produces StackOverflow exception on LinuxJava webapp 在 Linux 上产生 StackOverflow 异常
【发布时间】:2017-12-27 14:43:53
【问题描述】:

我有一个在 Tomcat 9 上运行的 Java-web 应用程序。它在 Windows 机器上运行良好。但是在 Debian Linux 服务器上部署此应用程序后,我在某些特定页面上遇到了 java.lang.StackOverflow 异常。这是堆栈跟踪日志的开头:

27-Dec-2017 08:54:43.746 SEVERE [https-jsse-nio-9443-exec-3] 
org.apache.catalina.core.ApplicationDispatcher.invoke Servlet.service() for 
servlet [jsp] threw exception
java.lang.StackOverflowError
at java.io.UnixFileSystem.canonicalize0(Native Method)
at java.io.UnixFileSystem.canonicalize(UnixFileSystem.java:172)
at java.io.File.getCanonicalPath(File.java:618)
at org.apache.catalina.webresources.AbstractFileResourceSet.file(AbstractFileResourceSet.java:90)

请在此处查看完整的堆栈跟踪: https://pastebin.com/0AmFDY8F

据我了解,Jasper 编译 JSP 页面源时发生异常,它与 Linux 路径/目录的解析有关。有人可以帮我弄清楚确切的问题是什么吗?我没有创建任何符号链接,如果问题可能与此有关。

【问题讨论】:

  • 即使你没有任何符号链接,你也可能想在你的文件系统上look for hard links
  • 不知道这是否相关,但请确保您使用正确的文件和路径,因为 Linux/Unix 区分大小写,而不是 Windows。
  • @azurefrog 硬链接怎么可能与这个问题有关?我检查了我系统上的硬链接:其中没有关于我的 webapp 的内容。
  • 这将是您在文件系统中拥有循环路径的另一种方式。我想不出另一种方法会导致堆栈溢出,试图做一些基本的事情,比如获取文件的规范路径。
  • @Alexandre Lavoie 这里一切正常。问题似乎与此无关。

标签: java linux tomcat web stack-overflow


【解决方案1】:

根据您的堆栈跟踪,问题是由于无法找到您的 Spring 框架解决的特定路径:

org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154)

...

原因:java.io.IOException: JSPException include path '/struct/context/tutorials.jsp'。

Spring 框架很可能使用规范路径来解析文件,它失败可能是因为框架中存在与您要部署到的 Unix 系统类型相关的一些怪癖。

请在 Spring 文档中参考:

默认脚本支持大多数 Linux 发行版,并在 CentOS 和 Ubuntu 上进行了测试。其他平台,例如 OS X 和 FreeBSD,将需要使用自定义的 embeddedLaunchScript。

请注意 Debian 未列出。希望这能让您走上正确的道路。
如果我在这里追逐红鲱鱼,我很抱歉 - 但你没有给我们太多继续。

【讨论】:

    【解决方案2】:

    我终于找到了导致 StackOverflow 异常的原因。我有一个递归 JSP 标记调用来呈现 <select> 标记的嵌套选项。去掉递归后,异常就消失了。当然,这只是一种解决方法,所以我仍然想知道为什么它在 Windows 上运行良好,而在 Linux 上却不行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-22
      • 2012-08-30
      • 2015-07-06
      • 2014-10-04
      • 1970-01-01
      • 1970-01-01
      • 2012-06-21
      相关资源
      最近更新 更多