JVM 选项 --XX MaxJavaStackTraceDepth 当我将任何值减小到 10 以下时,它不起作用

JVM option --XX MaxJavaStackTraceDepth when I decrease any value below 10, It is not working

提问人:Arun Pal 提问时间:11/6/2023 最后编辑:Arun Pal 更新时间:11/9/2023 访问量:108

问:

我正在尝试设置 jvm 选项 maxJavaStackTraceDepth。因此,当我将 JVM 选项 --XX MaxJavaStackTraceDepth 增加到 10 以上时。它按预期工作。但是当我将任何值减小到 10 以下时,它会导致 NoClassDefFoundError 错误。

Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class org.apache.logging.log4j.message.ReusableMessageFactory
        at org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2108)
        at org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:2015)
        at org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1886)
        at org.apache.logging.log4j.spi.AbstractLogger.error(AbstractLogger.java:849)
        at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:130)

理想情况下,它也应该在 10 个值以下工作 like -XX:MaxJavaStackTraceDepth=5 我正在使用 Java 17

Java 日志记录 配置 stack-trace jvm-hotspot

评论

0赞 Thomas Kläger 11/6/2023
出于好奇:为什么要将 maxJavaStackTraceDepth 设置为 10 或更低?
0赞 Arun Pal 11/6/2023
嗨,@ThomasKläger我想控制堆栈跟踪深度
0赞 Thomas Kläger 11/6/2023
我明白这一点。但是你要用这个解决的问题是什么?
1赞 Tobb 11/7/2023
该异常会转储大量信息,帮助您找到问题的原因。不知道你为什么不想要那个。
3赞 Holger 11/7/2023
某些类使用堆栈跟踪,例如用于标识调用方,这在使用委派时可能需要一定的最小深度。当然,更好的选择是使用 Java 9 引入的 ,但并非所有框架都已更新。因此,您最终会得到一个不支持此选项的库,但最终,它们尚未被指定为使用此选项。StackWalker

答:

0赞 Arun Pal 11/9/2023 #1

我对此进行了研究。我有以下观察。

当我们将 jvm 选项 MaxJavaStackTraceDepth 降低到某个阈值(例如 10)以下时,它可能无法按预期工作,因为它会影响 JVM 在抛出异常时提供有意义的堆栈跟踪的能力。

堆栈跟踪对于诊断和调试 Java 应用程序中的问题至关重要,因为它们提供有关导致异常或错误的方法调用序列的信息。当 MaxJavaStackTraceDepth 设置得太低时,JVM 可能无法在堆栈跟踪中捕获足够的信息来了解问题的上下文。

通常不建议将 MaxJavaStackTraceDepth 设置为非常低的值,尤其是低于 10。