从应用程序代码中输出 JRuby 堆 space
Output JRuby heap space from application code
有没有一种方法可以从应用程序代码中输出 Java 堆 space,JRuby 应用程序是用(如 -J-Xms2048m
)启动的?
事实证明,您可以像这样放置通过环境变量传入的值:
puts java.lang.System.getenv()['JRUBY_OPTS']
或
puts ENV['JRUBY_OPTS']
或
puts java.lang.management.ManagementFactory.getRuntimeMXBean().getInputArguments().to_s
记得之前require "java"
。
正如@stephanlindauer 指出的那样,在 JVM 命令行传入的值在 JDK 提供的运行时 JMX bean 中可用。
另一种对 JVM 的启动方式不太敏感的方法是使用内存 bean,如下所示:
membean = java.lang.management.ManagementFactory.memory_mx_bean
heap = membean.heap_memory_usage
puts heap.max
在我的没有特殊 JRuby 标志的系统上,它输出“466092032”(大致反映了我们默认的最大 500MB),并且当指定 2GB 最大堆时,(jruby -J-Xmx2g
)它输出“1908932608”。
有没有一种方法可以从应用程序代码中输出 Java 堆 space,JRuby 应用程序是用(如 -J-Xms2048m
)启动的?
事实证明,您可以像这样放置通过环境变量传入的值:
puts java.lang.System.getenv()['JRUBY_OPTS']
或
puts ENV['JRUBY_OPTS']
或
puts java.lang.management.ManagementFactory.getRuntimeMXBean().getInputArguments().to_s
记得之前require "java"
。
正如@stephanlindauer 指出的那样,在 JVM 命令行传入的值在 JDK 提供的运行时 JMX bean 中可用。
另一种对 JVM 的启动方式不太敏感的方法是使用内存 bean,如下所示:
membean = java.lang.management.ManagementFactory.memory_mx_bean
heap = membean.heap_memory_usage
puts heap.max
在我的没有特殊 JRuby 标志的系统上,它输出“466092032”(大致反映了我们默认的最大 500MB),并且当指定 2GB 最大堆时,(jruby -J-Xmx2g
)它输出“1908932608”。