【问题标题】:How to dynamically monitor Java heap size?如何动态监控 Java 堆大小?
【发布时间】:2011-01-10 22:01:11
【问题描述】:

我正在尝试动态监控 java 堆大小。有谁知道如何获得在运行一段代码的过程中使用的最大内存? Runtime.maxMemory() 能解决问题吗?谢谢

【问题讨论】:

    标签: java heap-memory monitoring


    【解决方案1】:

    maxMemory() 返回 java 将使用的最大内存量。所以这不会让你得到你想要的。 totalMemory() 是您正在寻找的东西。见docs

    【讨论】:

      【解决方案2】:

      有大量可用的分析器工具可以帮助您解决这个问题。一个流行的商业工具是YourKit,它得到了热烈的评价。一个免费的替代方案是VisualVM,我过去曾使用过它,它可以提供很多见解。

      【讨论】:

      • 一个旧线程,但无论如何都在评论。 VisualVM 易于使用,很好地满足了我的线程编程需求。谢谢你的建议。
      【解决方案3】:
      jstat -gc <pid> <time> <amount>
      

      jstat -gc `jps -l | grep weblogic\.Server | awk {'print $1'}` 1000 3
      

      3 个样本 1 一秒 see more here

      【讨论】:

        【解决方案4】:

        如果您愿意,您可以直观地查看使用 JConsole 分析您的应用程序的许多值。

        http://docs.oracle.com/javase/6/docs/technotes/tools/share/jconsole.html

        开始您的应用程序:

        -Dcom.sun.management.jmxremote
        

        当您启动 /bin/jconsole.exe 时,您的应用程序将可供选择

        【讨论】:

          【解决方案5】:

          我还想补充一点,jmap -heap &lt;PID&gt; 可以解决问题;那是假设您是一名运维人员并且需要知道 Java 进程正在使用多少堆。我不知道您的问题是程序化的还是可操作的。

          【讨论】:

            【解决方案6】:

            还有java.lang.management 包。使用ManagementFactory 获取MemoryMXBean 实例。它具有返回堆和非堆内存使用快照的方法。

            【讨论】:

              【解决方案7】:

              也许jvmtop 值得一看。 它是一个命令行工具,可提供多个指标的实时视图,包括堆大小:

               JvmTop 0.4.1 alpha amd64  8 cpus, Linux 2.6.32-27, load avg 0.12
               http://code.google.com/p/jvmtop
              
                PID MAIN-CLASS      HPCUR HPMAX NHCUR NHMAX    CPU     GC    VM USERNAME   #T DL
               3370 rapperSimpleApp  165m  455m  109m  176m  0.12%  0.00% S6U37 web        21
              27338 WatchdogManager   11m   28m   23m  130m  0.00%  0.00% S6U37 web        31
              19187 m.jvmtop.JvmTop   20m 3544m   13m  130m  0.93%  0.47% S6U37 web        20
              16733 artup.Bootstrap  159m  455m  166m  304m  0.12%  0.00% S6U37 web        46
              

              【讨论】:

                【解决方案8】:

                我们使用 OpNet 的 app internals xpert 在我们的负载测试环境和生产环境中实时监控堆使用和泄漏。它足够轻巧,不会影响产品,因此我们获得了无法从 QA 获得的大量数据。我们还对两种环境中的方法和数据库调用进行分析,以帮助我们找出要优化的代码/sql。非常酷的东西,带有漂亮的趋势图表,但绝不是免费的。如果您在自己的应用上投入了大量资金,那么投资是值得的。

                http://www.opnet.com/solutions/application_performance/appinternals-xpert.html

                【讨论】:

                  【解决方案9】:

                  另一个免费的替代方法是使用Java-monitor。看看这个live demo。只需单击任何服务器即可查看有关堆内存、非堆内存、文件描述符、数据库池等的详细图表。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2016-03-25
                    • 2021-05-11
                    • 2010-10-29
                    • 1970-01-01
                    • 2010-11-08
                    • 1970-01-01
                    • 1970-01-01
                    • 2010-10-15
                    相关资源
                    最近更新 更多