如何动态监控Java堆大小?

fly*_*ina 37 java heap monitoring

我试图动态监视Java堆大小.有人知道如何获得运行一段代码过程中使用的最大内存吗?Runtime.maxMemory()可以解决这个问题吗?谢谢

Jac*_*oen 29

maxMemory()返回java将使用的最大内存量.所以那不会得到你想要的东西.totalMemory()是你正在寻找的.请参阅文档


Han*_*Gay 13

有大量的探查器工具可以帮助您解决这个问题.一个流行的商业工具是YourKit,它得到好评如潮.一个免费的替代品是VisualVM,我过去曾经使用它,可以提供很多见解.


hel*_*ios 11

如果您愿意,可以使用JConsole直观地查看分析应用程序的大量值.

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

启动您的应用程序:

-Dcom.sun.management.jmxremote
Run Code Online (Sandbox Code Playgroud)

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


ago*_*nen 11

jstat -gc <pid> <time> <amount>
Run Code Online (Sandbox Code Playgroud)

jstat -gc `jps -l | grep weblogic\.Server | awk {'print $1'}` 1000 3
Run Code Online (Sandbox Code Playgroud)

3个样品1秒钟 在这里看到更多


小智 6

我还想补充一下jmap -heap <PID>这个诀窍; 假设你是一个操作员,需要知道Java进程使用了​​多少堆.我不知道你的问题是程序化的还是可操作的.