java head space/ java.lang.OutOfMemoryError: Java heap space内存溢出
2016-11-17 09:39
591 查看
上一篇JMX/JConsole调试本地还可以在centos6.5 服务器上进行监控有个问题端口只开放22那么设置的9998端口 你怎么都连不上怎么监控?(如果大神知道还望指点,个人见解)
线上项目出现了org.apache.solr.servlet.SolrDispatchFilter - null:java.lang.RuntimeException: java.lang.OutOfMemoryError: Java heap space
于是采用了在tomcat里面catalina.sh里面配置进行监控
注意加红字体的路径要记得只需要指定目录就行gc.log java.hprof会自动创建。
采用了 MemoryAnalyzer 进行dump分析:
[b]温馨提示:使用此工具的时java.hprof 如果文件大小高达3-9G需要到MemoryAnalyzer.ini -Xmx3072m 9个G需要设定5096m 否则分析一半卡死。[/b]
[b]分析结果如下图[/b]
由最后第二张图可知大多数的溢出都是由TopFieldCollector类里面的一个MulitiComparatorsFile方法,其他类也有溢出是因为extends继承了TopFieldCollector 。但是考虑这个代码是由apache组织写的不可能有这么大bug没发现,所以考虑是存在系统var/data/下面的索引文件问题,初始化为5.8G大小索引,可以尝试初始化索引。
我的情况是3个tomcat1,tomcat2,tomcat3 然后每个tomcat下面webapps都有源代码那么3个tomcat都加载是否加载了3次索引导致内存撑爆。然后采用tomcat1,tomcat2,tomcat3共用/home/tomcat/webapps来进行。
另外tomcat server.xml里面会有FULL GC不知道据说是tomcat6的一个bug为了检测监听内存泄露 大家要稍微注意下
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"gcDaemonProtection="false"/>
以上纯属个人观点,如果错误还望大神指出,小弟技术菜鸟 思维一般。
线上项目出现了org.apache.solr.servlet.SolrDispatchFilter - null:java.lang.RuntimeException: java.lang.OutOfMemoryError: Java heap space
于是采用了在tomcat里面catalina.sh里面配置进行监控
JAVA_OPTS="-Xms5120m -Xmx5120m -Xss512K -XX:PermSize=256m -XX:MaxPermSize=256m -XX:SurvivorRatio=4 -XX:-UseGCOverheadLimit -XX:NewSize=3096m -XX:MaxDirectMemorySize=1024m -XX:+ExplicitGCInvokesConcurrent -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseCompressedOops -XX:-ReduceInitialCardMarks -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/data/tomcat/java.hprof -XX:+PrintGCDetails -XX:+PrintGCDateStamps -verbose:gc -Xloggc:/var/data/tomcat/gc.log -Dcom.sun.management.jmxremote.port=1099 -Djava.rmi.server.hostname=localhost -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false "
注意加红字体的路径要记得只需要指定目录就行gc.log java.hprof会自动创建。
采用了 MemoryAnalyzer 进行dump分析:
[b]温馨提示:使用此工具的时java.hprof 如果文件大小高达3-9G需要到MemoryAnalyzer.ini -Xmx3072m 9个G需要设定5096m 否则分析一半卡死。[/b]
[b]分析结果如下图[/b]
由最后第二张图可知大多数的溢出都是由TopFieldCollector类里面的一个MulitiComparatorsFile方法,其他类也有溢出是因为extends继承了TopFieldCollector 。但是考虑这个代码是由apache组织写的不可能有这么大bug没发现,所以考虑是存在系统var/data/下面的索引文件问题,初始化为5.8G大小索引,可以尝试初始化索引。
我的情况是3个tomcat1,tomcat2,tomcat3 然后每个tomcat下面webapps都有源代码那么3个tomcat都加载是否加载了3次索引导致内存撑爆。然后采用tomcat1,tomcat2,tomcat3共用/home/tomcat/webapps来进行。
另外tomcat server.xml里面会有FULL GC不知道据说是tomcat6的一个bug为了检测监听内存泄露 大家要稍微注意下
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"gcDaemonProtection="false"/>
以上纯属个人观点,如果错误还望大神指出,小弟技术菜鸟 思维一般。
相关文章推荐
- Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
- java.lang.OutOfMemoryError: Java heap space
- java.lang.OutOfMemoryError: Java heap space
- java.lang.OutOfMemoryError: Java heap space解决方法
- Java applet java.lang.OutOfMemoryError: Java heap space
- java.lang.OutOfMemoryError: Java heap space + myeclipse中分配tomcat启动时所占内存大小
- Caused by: java.lang.OutOfMemoryError: Java heap space
- Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
- java.lang.OutOfMemoryError: Java heap space问题
- java.lang.OutOfMemoryError: Java heap space
- java.lang.OutOfMemoryError: Java heap space
- 使用Java程序从数据库中查询大量的数据时出现异常:java.lang.OutOfMemoryError: Java heap space
- java.lang.OutOfMemoryError: Java heap space
- java.lang.OutOfMemoryError: Java heap space + myeclipse中分配tomcat启动时所占内存大小
- java.lang.OutOfMemoryError: Java heap space
- java.lang.OutOfMemoryError: Java heap space JVM内存设置
- java.lang.OutOfMemoryError: Java heap space
- java错误处理:java.lang.OutOfMemoryError: Java heap space
- java.lang.OutOfMemoryError: Java heap space
- java.lang.OutOfMemoryError: Java heap space 的解决