【问题标题】:Jboss application installation errorJboss应用安装错误
【发布时间】: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


【解决方案1】:

根本原因:

程序所需的堆栈空间量超过(超过 JVM 分配的大小),原因如下:

  • 程序和/或用例需要更大的堆栈(例如,图形密集型程序)。

  • 应用程序是深度嵌套的(递归)。

  • 无限循环

以 64k 为增量增加线程堆栈大小,直到 StackOverflowError 消失。或者,修改代码或配置以避免递归或无限循环。

【讨论】:

    猜你喜欢
    • 2018-05-21
    • 2014-01-11
    • 2022-08-15
    • 2014-08-15
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    相关资源
    最近更新 更多