【问题标题】:How to check the configured Xmx value for a running java application如何检查正在运行的 java 应用程序的配置 Xmx 值
【发布时间】:2011-09-30 14:39:34
【问题描述】:

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

【问题讨论】:

    标签: java memory jvm


    【解决方案1】:

    就我而言,jmap 是我能找到的最佳解决方案:

    jmap -heap <pid>
    

    上面的命令显示了完整的堆配置+当前使用情况。

    jmap 命令包含在 bin 目录下的 jdk 中。

    【讨论】:

      【解决方案2】:

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

      Runtime.getRuntime().maxMemory();
      

      还成功使用了以下内容:

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

      【讨论】:

      • 感谢您的提示,它可能会成功,但我对使用 'jps -v ' 的提示非常满意
      【解决方案3】:

      jps 是一个很好的解决方案,运行即可

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

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

      【讨论】:

      • 谢谢!这正是我想要的。作为记录, jps 是 jdk 的一部分;对于我的安装,我在 C:\Program Files\Java\jdk1.6.0_24\bin 下找到了它
      • 感谢 JSP 提示,不幸的是它不适用于 GrailsS​​tarter
      【解决方案4】:

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

      获得相同的信息
      jhsdb jmap --heap --pid <pid>
      

      【讨论】:

        【解决方案5】:

        我是 kill -3 的忠实粉丝,它会为您提供有关当前内存和垃圾收集以及所有线程堆栈的详细信息。

        【讨论】:

        • 感谢您的想法,但 nsis 安装程序仅针对 Windows 平台。按照这个想法,我检查了 Windows 是否存在挂起,但 taskkill (technet.microsoft.com/en-us/library/bb491009.aspx) 成功杀死了我的进程,但没有提供任何进一步的信息。
        • 顺便说一句,对于 linux,应用程序是使用 shell 脚本启动的,其中 xml 可以以纯文本形式配置。对于 OSX,它包含在应用文件中。
        猜你喜欢
        • 2017-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-12
        • 2014-09-26
        • 2013-09-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多