Java:如何检查当前的Perm / Permgen尺寸?
题
昨天,当我运行WebLogic Application Server 11G安装程序时,我遇到了一个OutofMemory错误,因此我搜索了答案:
java -Xms256m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=256m -jar wls1032_generic.jar
一切都起作用:)
但是,当我三思而后行时,我可能犯了一个错误:我怎么能知道当前的设置?我当然需要在覆盖它们之前检查它们的价值,对吗?
有什么想法吗?
相关链接: 人们进来 另一个线程 建议的反复试验方法,这不是理想的。
提前谢谢了。
解决方案
您可以通过使用该运行JVM的任何JVM标志的值 jinfo.exe
效用。
%JAVA_HOME%\bin\jinfo.exe -flag <flagName> <pid>
因此,要检查值 -XX:PermSize
JVM选项您可以运行
%JAVA_HOME%\bin\jinfo.exe -flag PermSize <pid>
其他提示
您可以使用 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。
您可以使用诸如VisualVM之类的东西 http://java.dzone.com/articles/best-kept-secret-jdk-visualvm&default=false&zid=159&browser = 16&mid=0&refresh=0, ,为了监视您的内存使用情况,您将看到最大的位置,它将为您提供有关内存的哪一部分实际上已满的特定信息,因此您可以更好地优化环境。
您可能会发现,您不考虑的内存的某些部分实际上是在填充,并且通过监视它,您可以看到需要做什么才能获得更好的性能。
获取Permgen信息的另一种方法是:
kill -3 JAVA_PID
它获取线程转储和内存信息(包括permgen)。示例输出:
PSPermGen total 68864K, used 68808K [0x000000009c600000, 0x00000000a0940000, 0x00000000a1800000)
由于某些原因 金富 当我需要时不起作用。它返回:
Unable to open socket file: target process not responding or HotSpot VM not loaded
上述原因很少,其中一个可能是明确声明 java.io.tmpdir 如图所述 https://www.permeance.com.au/web/terry.mueller/home/home/-/blogs/unable-to-popen-socket-socket-file-target-target-process-process-not-responding-responding-or-hotspot-or-hotspot-not-not--not--not--not--not--not--not--not--not-加载