如果发生了内存泄露,好重现的话打开JVM的HeapDumpOnOutOfMemoryError参数,待到有了Heap Dump再使用MAT等工具分析。如果不好重现,使用JVisualvm,或者jmap,Jprofiler进行Heap Dump,使用MAT进行分析。根据以上列表,对代码进行审查,对写代码的同学进行交流,也许很快也能找泄露的原因。
1、配置方法
在JAVA_OPTIONS变量中增加
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${目录}。
例如:export JAVA_OPTS="-Xms2048M -Xmx2048M -Xmn682M -XX:MaxPermSize=96M"
2、参数说明
(1)-XX:+HeapDumpOnOutOfMemoryError参数表示当JVM发生OOM时,自动生成DUMP文件。
(2)-XX:HeapDumpPath=${目录}参数表示生成dump文件的路径,也可以指定文件名称,例如:
-XX:HeapDumpPath=${目录}/java_heapdump.hprof。
如果不指定文件名,默认为:java_<pid>_<date>_<time>_heapDump.hprof。
参数的含义
-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
-vmargs 说明后面是VM的参数,所以后面的其实都是JVM的参数了
-Xms128m JVM初始分配的堆内存
-Xmx512m JVM最大允许分配的堆内存,按需分配
-XX:PermSize=64M JVM初始分配的非堆内存
-XX:MaxPermSize=128M JVM最大允许分配的非堆内存,按需分配
我是在一次导出了可执行的jar包用于生产环境加工一些数据的命令用
java $JAVA_OPTIONS -jar yourExcut.jar
网友评论