如何dynamic监控Java堆大小?
我正在尝试dynamic监视Java堆大小。 有谁知道如何获得在运行一段代码的过程中使用的最大内存? Runtime.maxMemory()有诀窍吗? 谢谢
maxMemory()
返回java将使用的最大内存量。 所以这不会得到你想要的。 totalMemory()
是你正在寻找,但。 请参阅文档
有大量的探查工具可以帮助你。 一个stream行的商业工具是YourKit ,并得到好评如潮。 一个免费的select是VisualVM ,我曾经使用过,可以提供很多的洞察力。
如果你喜欢,你可以通过JConsole可视化地查看许多分析你的应用程序的值。
http://docs.oracle.com/javase/6/docs/technotes/tools/share/jconsole.html
开始您的应用程序:
-Dcom.sun.management.jmxremote
而且您启动/bin/jconsole.exe时,您的应用程序将可供select
jstat -gc <pid> <time> <amount>
jstat -gc `jps -l | grep weblogic\.Server | awk {'print $1'}` 1000 3
3个样品1秒1 在这里看到更多
我还想补充说, jmap -heap <PID>
没有办法。 这是假设你是一个操作员,并需要知道多less堆的Java进程正在使用。 我不能告诉你的问题是编程的,还是可操作的。
还有java.lang.management包。 使用ManagementFactory来获得一个MemoryMXBean
实例。 它有方法返回堆和非堆内存使用快照。
也许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
我们使用OpNet的应用程序内部xpert来监视堆使用情况和实时泄漏在我们的负载testing环境和生产。 它足够轻便,不会影响产品,所以我们可以获得我们无法从质量保证获得的好数据。 我们还在两种环境中分析方法和数据库调用,以帮助我们找出要优化的代码/ SQL。 非常酷的东西与漂亮的趋势图,但没有任何伸展自由。 如果您的应用程序拥有大量的资金,那么投资是值得的。
http://www.opnet.com/solutions/application_performance/appinternals-xpert.html
另一个免费的select是使用Java监视器 。 看看这个现场演示 。 只需单击任何服务器即可查看有关堆内存,非堆内存,文件描述符,数据库池等的详细图表。