![](/img/trans.png)
[英]Multiple Threads Accessing the socket read causing jvm OutOfMemory Issue
[英]How to find which Class is causing OutOfMemory for the JVM?
我们的Weblogic服务器经常崩溃,出现OutOfMemory错误。 有什么方法可以监视JVM以找出哪些类正在占用内存并拥有最大数量的对象?
是。 我这样做的方法是配置jvm以在OOM上创建堆转储,然后我将堆拉下来并通过jvisualvm运行它。 你可以计算保留的大小(花了很长时间),但非常清楚罪犯是什么。
您还可以将jvisualvm附加到正在运行的实例,但是您需要配置jvm以接受连接。 这样你就可以看到堆实时增长。 看到这个; 它的jboss但应该非常相似: https : //wiki.projectbamboo.org/display/BTECH/VisualVM+Profiler
我认为在你有一个堆转储之后找到答案会更容易,因为当你实时观察它时会收集垃圾和诸如此类的东西。
编辑 - 这是我的启动配置。
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps
-Xloggc:/path/to/memlogs/memlog.txt -XX:+PrintTenuringDistribution
-Xms1024m -Xmx2048m -XX:MaxPermSize=128m
-server -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=xxxx
-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=<ip-address> -XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/path/to/heapdumps/ -XX:+CMSClassUnloadingEnabled
-XX:+CMSPermGenSweepingEnabled -XX:+UseConcMarkSweepGC
因为我将它配置为删除内存日志,我可以实时查看memlog.txt文件,看看发生了什么。 如果我愿意,我可以连接到jvm,但就像我说的那样,我会在崩溃后分析堆,看看问题是什么,因为事实之后它真的很清楚......
从JDK 1.5开始有JConsole (或5.0,如果你进入那个)。
有很多工具,但我使用的是Eclipse的Memory Analysis Toolkit。 您可以将其作为独立工具下载,它可以让您进行堆分析甚至连接到JVM并在那里进行分析。
除了JConsole,jRat是一款优秀的免费啤酒分析器,YourKit是另一款出色的商业产品。
我从其他一些问题中了解了jhat和jmap。 这些已经在JDK包中提供。 此外,以下链接提供了一个很好的列表,列出了在哪些情况下使用的工具: -
http://java.sun.com/developer/technicalArticles/J2SE/monitoring/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.