Java:如何检查当前的Perm/PermGen大小?

Java:如何检查当前的Perm/PermGen大小?,java,jvm,jvm-crash,Java,Jvm,Jvm Crash,昨天,当我运行WebLogic Application Server 11g安装程序时,我遇到了OutOfMemory错误,因此我搜索了答案: java -Xms256m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=256m -jar wls1032_generic.jar 一切顺利:) 然而,当我仔细考虑这个解决方案时,我可能犯了一个错误:我怎么知道这些设备的当前设置?我当然需要在重写它们之前检查它们的值,对吗 有什么想法吗 相关链接:人们建议采用试

昨天,当我运行WebLogic Application Server 11g安装程序时,我遇到了OutOfMemory错误,因此我搜索了答案:

java -Xms256m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=256m -jar wls1032_generic.jar
一切顺利:)

然而,当我仔细考虑这个解决方案时,我可能犯了一个错误:我怎么知道这些设备的当前设置?我当然需要在重写它们之前检查它们的值,对吗

有什么想法吗

相关链接:人们建议采用试错法,但这并不理想


非常感谢。

您可以使用VisualVM之类的工具来监控您的内存使用情况,您将看到最大值达到峰值,它将为您提供有关内存中哪部分实际已满的具体信息,以便更好地优化您的环境


您可能会发现一些您没有考虑的内存部分实际上正在被填满,通过监视它,您可以看到需要做些什么来获得更好的性能。

您可以使用
jinfo.exe
实用程序来检查正在运行的JVM的任何JVM标志的值

%JAVA\u HOME%\bin\jinfo.exe-flag

因此,要检查
-XX:PermSize
JVM选项的值,您可以运行


%JAVA\u HOME%\bin\jinfo.exe-标志PermSize

获取PermGen信息的另一种方法是:

kill -3 JAVA_PID
它获取线程转储和内存信息(包括PermGen)。示例输出:

PSPermGen       total 68864K, used 68808K [0x000000009c600000, 0x00000000a0940000, 0x00000000a1800000)
由于某种原因,当我需要时,jinfo没有工作。它返回:

Unable to open socket file: target process not responding or HotSpot VM not loaded

出现上述情况的可能原因很少,其中一个可能是java.io.tmpdir的显式声明,如

所述。您可以使用jmap的JVM堆转储工具

例如:

jmap -heap 5900
它将打印:

Heap Configuration:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize      = 989855744 (944.0MB)
   NewSize          = 1310720 (1.25MB)
   MaxNewSize       = 17592186044415 MB
   OldSize          = 5439488 (5.1875MB)
   NewRatio         = 2
   SurvivorRatio    = 8
   PermSize         = 21757952 (20.75MB)
   MaxPermSize      = 85983232 (82.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 242352128 (231.125MB)
   used     = 9196056 (8.770042419433594MB)
   free     = 233156072 (222.3549575805664MB)
   3.79450185805672% used
From Space:
   capacity = 41877504 (39.9375MB)
   used     = 0 (0.0MB)
   free     = 41877504 (39.9375MB)
   0.0% used
To Space:
   capacity = 42663936 (40.6875MB)
   used     = 0 (0.0MB)
   free     = 42663936 (40.6875MB)
   0.0% used
PS Old Generation
   capacity = 80609280 (76.875MB)
   used     = 34187936 (32.604156494140625MB)
   free     = 46421344 (44.270843505859375MB)
   42.41191088668699% used
PS Perm Generation
   capacity = 85393408 (81.4375MB)
   used     = 63472624 (60.53221130371094MB)
   free     = 21920784 (20.905288696289062MB)
   74.32965317416539% used

它获取内存信息(包括PermGen)。
5900
是Java的进程id

您使用的是32位还是64位操作系统?32位版本的内存限制可能太大了。@James Black:幸运/不幸的是,64位:)标题和描述中的问题模棱两可。当前大小可以用jmap检查,当前设置可以用jmap和jinfo检查。可能是因为
jinfo
没有以JVM的用户身份运行它。尝试以root/管理员身份运行
jinfo