jvm 如何检查正在运行的Java应用程序的已配置Xmx值

ergxz8rk  于 2022-11-07  发布在  Java
关注(0)|答案(6)|浏览(275)

我正在创建一个NSIS脚本,在安装过程中可以为正在安装的java应用程序设置Xmx值。我不确定该参数是否设置正确。有没有方法在应用程序运行时检查配置的Xmx值?

icnyk63a

icnyk63a1#

在我的例子中,jmap是我能找到的最好的解决方案:

jmap -heap <pid>

上面的命令显示了完整的堆配置+当前使用情况。
jmap命令包含在bin目录中的jdk内。

p8ekf7hl

p8ekf7hl2#

便宜又脏(可靠性不确定):

Runtime.getRuntime().maxMemory();

还成功地使用了以下产品:

MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean();
    memoryBean.getHeapMemoryUsage().getMax();
os8fio9y

os8fio9y3#

jps是一个很好的解决方案,只需运行

jps # shows pids
jps -v <pid> # shows params

但是,请记住以启动进程的用户身份运行它,否则它将无法正常工作。

i5desfxk

i5desfxk4#

Doron Gold给出了Java 8及更低版本的正确答案。对于Java 9及更高版本,您可以使用

jhsdb jmap --heap --pid <pid>
cetgtptt

cetgtptt5#

我是kill -3的忠实粉丝< pid >,它将为您提供当前内存和垃圾收集的详细信息,沿着所有线程的堆栈。

i34xakig

i34xakig6#

下面的代码对我来说适用于JVM版本11.0.16(我已经安装了OpenJDK 11)

sudo jhsdb jinfo --flags --pid <pid>

不使用“sudo”它可能对您有效。
sudo jhsdb jmap --heap --pid <pid>给我以下错误信息后,我不得不这样做:线程“main”中出现异常。地址类型没有合适的匹配项

相关问题