Java:如何检查当前 Perm / PermGen 大小?
昨天,当我运行 WebLogic Application Server 11g 安装程序时,遇到了 OutOfMemory 错误,因此我在 Google 上搜索了答案:
java -Xms256m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=256m -jar wls1032_generic.jar
一切正常:)
但是,当我仔细考虑解决方案时,我可能犯了一个错误:我怎么知道目前的设置有那些?我当然需要在覆盖它们之前检查它们的值,对吧?
有什么想法吗?
相关链接:中的人员SO 上的另一个线程建议尝试和错误方法,这并不理想。
非常感谢。
Yesterday when I was running the WebLogic Application Server 11g installer, I encountered a OutOfMemory error, so I Googled for the answer:
java -Xms256m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=256m -jar wls1032_generic.jar
Everything worked :)
However, when I think twice about the solution, I might have made a mistake: How could I know the current settings of those? I certainly need to check their values before overriding them, right?
Any thoughts?
Related link: People in another thread on SO suggested trial and error approach, which is not ideal.
Many thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以使用
jinfo.exe
实用程序检查正在运行的 JVM 的任何 JVM 标志的值。%JAVA_HOME%\bin\jinfo.exe -flag;
因此,要检查
-XX:PermSize
JVM 选项的值,您可以运行%JAVA_HOME%\bin\jinfo.exe -flag PermSize< /代码>
You can check the values of any JVM flags of a running JVM by using the
jinfo.exe
utility.%JAVA_HOME%\bin\jinfo.exe -flag <flagName> <pid>
so to check the value of
-XX:PermSize
JVM option you can run%JAVA_HOME%\bin\jinfo.exe -flag PermSize <pid>
您可以在此处使用
jmap
,它是 JVM 堆转储工具。例如:
会打印:
It gets内存信息(包括PermGen)。
5900
是Java的进程id。You can use
jmap
at here, it's JVM Heap Dump Tool.for example:
It will print:
It gets memory information (including PermGen).
5900
is the process id of Java.您可以使用 VisualVM 之类的东西, http://java.dzone.com/articles/best-kept-secret-jdk-visualvm&default=false&zid=159&browser=16&mid=0&refresh= 0,监视您的内存使用情况,您将看到其峰值的最大值,并且它将为您提供有关内存的哪一部分实际上已满的具体信息,以便您可以更好地优化您的环境。
您可能会发现您没有想到的内存的某些部分实际上已被填满,通过监视它您可以看到需要做什么才能获得更好的性能。
You can use something like VisualVM, http://java.dzone.com/articles/best-kept-secret-jdk-visualvm&default=false&zid=159&browser=16&mid=0&refresh=0, to monitor your memory usage and you will see the max by where it peaks, and it will give you specific info as to which part of memory is actually full, so you can better optimize your environment.
You may find that some part of memory that you don't think about is actually filling up, and by monitoring it you can see what you need to do to get better performance.
另一种获取 PermGen 信息的方法是:
获取线程转储和内存信息(包括 PermGen)。示例输出:
由于某种原因,jinfo 在我需要时不起作用。它返回:
上述情况的可能原因很少,其中之一可能是 java.io.tmpdir 的显式声明,如 https ://www.permeance.com.au/web/terry.mueller/home/-/blogs/unable-to-open-socket-file-target-process-not-responding-or-hotspot-vm-not-loaded
Another way to get PermGen information is:
It gets thread dump and memory information (including PermGen). Example output:
For some reason jinfo did not work when I needed it. It returned:
There are few possible causes of the above and one of them may be explicit declaration of the java.io.tmpdir as described at https://www.permeance.com.au/web/terry.mueller/home/-/blogs/unable-to-open-socket-file-target-process-not-responding-or-hotspot-vm-not-loaded