从应用程序代码中输出 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”。