分类标签归档:Java

Dubbo的cache引起的一次OutOfMemory问题解决


所有的Web应用全部报错“java.lang.OutOfMemoryError: Java heap space”,并且由于在启动脚本中添加了“-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/webapp/dumpfile/****.hprof” ,于是直接生产了大量的dump文件。
根据错误“Java heap space”,判断是堆的内存溢出了。但是奇怪的是所有的应用仍然运行正常,没有任何问题。难道是部分线程死了部分仍然在处理业务?
通过jvisualvm对相应的hprof文件进行分析,锁定问题在“DubboSaveRegistryCac

Read more

dubbo服务绑定和注册的地址


dubbo服务一次编译多节点部署,存在编译打包的地址绑定问题。 如果暂时不考虑docker进行地址和端口映射的情况下,可以考虑如下配置,避免绑定特定ip之后无法发布到其他主机节点的问题。

dubbo.protocol.host=0.0.0.0

Read more

为何top或者ps看到的java进程的内存比Xmx高


启动参数中设置了最大堆内存为3000M,运行一段时间后在通过top或者ps -aux看到相应的java.exe进程占用了3452M内存,而应用没有OOM,运行一切正常。

排除真正应用泄露内存之外,99%情况下是JVM正常情况。
使用的最大内存 = [-Xmx] + [-XX:MaxPermSize] + number_of_threads * [-Xss]
JVM还需要一些空间,用于以下原因:
1)垃圾收集
2)JIT优化
3)堆外分配
4)JNI代码
5)元空间

JVM参数如下:
-Xmx 设置JVM最大可用内存为3000m
-Xms 设置JVM初始内存为1000m
-Xmn 设置

Read more

JVM发生OOM的8种原因、及解决办法


搞Java的同学,多多少少会碰到内存溢出(OOM)的场景,但造成OOM的原因却是多种多样。
一、堆溢出
  这种场景最为常见,报错信息: java.lang.OutOfMemoryError: Java heap space
原因:
  代码中可能存在大对象分配 2、可能存在内存泄露,导致在多次GC之后,还是无法找到一块足够大的内存容纳当前对象。
解决方法:
  1、检查是否存在大对象的分配,最有可能的是大数组分配
  2、通过jmap命令,把堆内存dump下来,使用mat工具分析一下,检查是否存在内存泄露的问题
  3、如果没有找到明显

Read more

调优策略1--JVM


内存大小相关
-Xms1024m JVM初始分配的堆内存
-Xmx1024m JVM最大允许分配的堆内存
-Xmn512m JVM年轻代大小
-XX:MaxDirectMemorySize=512m 最大DirectMemory
-XX:PermSize=512m JVM初始分配的非堆内存
-XX:MaxPermSize=512m JVM最大允许分配的非堆内存
-XX:ReservedCodeCacheSize=240M
CMS GC 相关
-XX:+UseConcMarkSweepGC 设置年老代为并发收集
-XX:CMSInitiatingOccupancyFraction=75 表示

Read more