【发布时间】:2017-06-10 09:43:30
【问题描述】:
目前在 Jboss AS (Jboss 6.2) 中部署应用程序时,我面临以下异常。
[Server:server-one] 20:23:35,791 ERROR [stderr] (Periodic Recovery) Exception in thread "Periodic Recovery" java.lang.StackOverflowError [Server:server-one]
[Server:server-one] 20:23:35,791 ERROR [stderr] (Periodic Recovery) at java.io.FilePermission$1.run(FilePermission.java:183) [Server:server-one]
[Server:server-one] 20:23:35,791 ERROR [stderr] (Periodic Recovery) at java.security.AccessController.doPrivileged(Native Method) [Server:server-one]
[Server:server-one] 20:23:35,791 ERROR [stderr] (Periodic Recovery) at java.io.FilePermission.init(FilePermission.java:183) [Server:server-one]
[Server:server-one] 20:23:35,791 ERROR [stderr] (Periodic Recovery) at java.io.FilePermission.<init>(FilePermission.java:249) [Server:server-one]
[Server:server-one] 20:23:35,791 ERROR [stderr] (Periodic Recovery) at sun.net.www.protocol.file.FileURLConnection.getPermission(FileURLConnection.java:200)
有人遇到过这样的问题吗?
提前致谢
【问题讨论】:
-
"StackOverflowError" 定义递归方法并递归调用此方法时可能会引发错误。这意味着方法调用自身。一旦我们调用该方法,递归就会结束,将 0 作为参数传递。在您的情况下,递归不会终止。根据 JVM 的初始配置,结果可能会有所不同,但最终会抛出 StackOverflowError。
-
最简单的解决方案是仔细检查堆栈跟踪并检测行号的重复模式。这些行号表示被递归调用的代码。一旦你检测到这些行,你必须仔细检查你的代码并理解为什么递归永远不会终止。
-
如果您已经验证递归实现正确,您可以增加堆栈的大小,以允许更多的调用。根据安装的 Java 虚拟机 (JVM),默认线程堆栈大小可能等于 512KB 或 1MB。您可以使用 -Xss 标志增加线程堆栈大小。该标志可以通过项目的配置或命令行指定。 -Xss 参数的格式为:-Xss
[g|G|m|M|k|K]
标签: java deployment jboss