我正在创建一个NSIS脚本,在安装过程中可以为正在安装的java应用程序设置Xmx值。我不确定该参数是否设置正确。有没有方法在应用程序运行时检查配置的Xmx值?
icnyk63a1#
在我的例子中,jmap是我能找到的最好的解决方案:
jmap -heap <pid>
上面的命令显示了完整的堆配置+当前使用情况。jmap命令包含在bin目录中的jdk内。
p8ekf7hl2#
便宜又脏(可靠性不确定):
Runtime.getRuntime().maxMemory();
还成功地使用了以下产品:
MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean(); memoryBean.getHeapMemoryUsage().getMax();
os8fio9y3#
jps是一个很好的解决方案,只需运行
jps
jps # shows pids jps -v <pid> # shows params
但是,请记住以启动进程的用户身份运行它,否则它将无法正常工作。
i5desfxk4#
Doron Gold给出了Java 8及更低版本的正确答案。对于Java 9及更高版本,您可以使用
jhsdb jmap --heap --pid <pid>
cetgtptt5#
我是kill -3的忠实粉丝< pid >,它将为您提供当前内存和垃圾收集的详细信息,沿着所有线程的堆栈。
i34xakig6#
下面的代码对我来说适用于JVM版本11.0.16(我已经安装了OpenJDK 11)
sudo jhsdb jinfo --flags --pid <pid>
不使用“sudo”它可能对您有效。在sudo jhsdb jmap --heap --pid <pid>给我以下错误信息后,我不得不这样做:线程“main”中出现异常。地址类型没有合适的匹配项
sudo jhsdb jmap --heap --pid <pid>
6条答案
按热度按时间icnyk63a1#
在我的例子中,jmap是我能找到的最好的解决方案:
上面的命令显示了完整的堆配置+当前使用情况。
jmap命令包含在bin目录中的jdk内。
p8ekf7hl2#
便宜又脏(可靠性不确定):
还成功地使用了以下产品:
os8fio9y3#
jps
是一个很好的解决方案,只需运行但是,请记住以启动进程的用户身份运行它,否则它将无法正常工作。
i5desfxk4#
Doron Gold给出了Java 8及更低版本的正确答案。对于Java 9及更高版本,您可以使用
cetgtptt5#
我是kill -3的忠实粉丝< pid >,它将为您提供当前内存和垃圾收集的详细信息,沿着所有线程的堆栈。
i34xakig6#
下面的代码对我来说适用于JVM版本11.0.16(我已经安装了OpenJDK 11)
不使用“sudo”它可能对您有效。
在
sudo jhsdb jmap --heap --pid <pid>
给我以下错误信息后,我不得不这样做:线程“main”中出现异常。地址类型没有合适的匹配项