【发布时间】: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