以编程方式获取 JVM 的 -Xss 最大堆栈大小分配值?
Obtaining the -Xss Max Stack Size Allocation value for the JVM Programmatically?
我有一个应用程序,如果 -Xss
堆栈大小将失败并出现 Whosebug
错误,如果值设置低于 256k
。不幸的是,在实例化一个非常大的 XSD 验证器时,这是一个与库 com.sun.org.apache.xerces
相关的案例。
现在,-Xss192k
的预定义值是我们在某些环境中一直使用的值,并且知道这是导致问题的原因。
出于日志记录的目的,我想知道是否有可能通过 Java 本身获得最大堆栈大小,并在初始化时抛出错误,指示提供的堆栈大小不足,而不是让应用程序部署,然后尝试将堆栈用于此过程,结果溢出?
日志中的当前 WhosebugError
对于调试目的而言信息相对较少,而且我知道捕获错误是一种糟糕的编程礼仪。
具体来说,我想做的是,在伪代码中:
if(jvm.getMaxStackSize() < "256k") {
throw new Exception("Insufficient Stack Size for this application. Please set to 256k or more.");
} //stop program from continuing because the stack size will result in a Whosebug if set too low
相关 post Can one obtain actual stack size used by a thread in Java after some time of running? 提供了有关如何在运行时监视堆栈大小的信息,但我没有看到获取 JVM 预设堆栈大小的方法。
尝试使用
RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
List<String> args = runtime.getInputArguments();
这应该为您提供创建 JVM 时传递给它的参数。
我有一个应用程序,如果 -Xss
堆栈大小将失败并出现 Whosebug
错误,如果值设置低于 256k
。不幸的是,在实例化一个非常大的 XSD 验证器时,这是一个与库 com.sun.org.apache.xerces
相关的案例。
现在,-Xss192k
的预定义值是我们在某些环境中一直使用的值,并且知道这是导致问题的原因。
出于日志记录的目的,我想知道是否有可能通过 Java 本身获得最大堆栈大小,并在初始化时抛出错误,指示提供的堆栈大小不足,而不是让应用程序部署,然后尝试将堆栈用于此过程,结果溢出?
日志中的当前 WhosebugError
对于调试目的而言信息相对较少,而且我知道捕获错误是一种糟糕的编程礼仪。
具体来说,我想做的是,在伪代码中:
if(jvm.getMaxStackSize() < "256k") {
throw new Exception("Insufficient Stack Size for this application. Please set to 256k or more.");
} //stop program from continuing because the stack size will result in a Whosebug if set too low
相关 post Can one obtain actual stack size used by a thread in Java after some time of running? 提供了有关如何在运行时监视堆栈大小的信息,但我没有看到获取 JVM 预设堆栈大小的方法。
尝试使用
RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
List<String> args = runtime.getInputArguments();
这应该为您提供创建 JVM 时传递给它的参数。