1、设置参数
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=temp/heapsump.prof
-XX:+HeapDumpOutOfMemoryError设置当发生OOM时生成Dump文件
-XX:HeapDumpPath设置发生OOM时生成的Dump文件存放路径
2、示例
java -Xms750m -Xmx750m -Xmn512m -Xss1024k -XX:MaxPermSize=128m
-XX:+UseConcMarkSweepGC
-XX:CMSFullGCsBeforeCompaction=5
-XX:+UseCMSCompactAtFullCollection
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:/tmp/jvm.log
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/tmp/heapdump.hprof
-Dfile.encoding=utf-8 -jar /data/app/test.jar
1、-Xms750m:表示堆内存初始值为750M
2、-Xmx750m:表示堆内存最大值为750M
3、-Xmn512m:设置年轻代大小为512M。整个JVM内存=年轻代大小+老年代大小+持久代大小。持久代一般为64m,所以增加年轻代大小,会减小老年代大小。sun官方推荐为整个堆配置的3/8。
4、-Xss1024K:设置每个线程的堆栈大小。JDK5以后每个线程堆栈大小为1M。根据应用的所需内存大小进行调整。在相同的物理内存下,减少这个值,可以生成更多的线程。但是操作系统对于一个进程内的线程数是有限制的,并不能无线生成。
5、-XX:MaxPermSize:设置永久代的大小,此属性在JDK8之后不在提供
6、-XX:+UseConcMarkSweepGC:设置使用CMS垃圾收集器
7、-XX:+UseCMSCompactAtFullCollection:在发生FULLGC后进行一次整理,过程是独占的,会导致停顿事件加长。
8、-XX:+PrintGC:每次GC时打印相关信息。
9、-XX:+PrintGCDetails:每次GC时打印详细信息
10、-XX:+PrintGCTimeStamps 打印每次GC的时间戳
11、-Xloggc:/tmp/jvm.log 设置垃圾回收日志打印的文件,文件名称可以自定义
12、-XX:+HeapDumpOnOutOfMemoryError 设置当首次遭遇内存溢出时导出此时堆中相关信息13、-XX:HeapDumpPath=/tmp/heapdump.hprof 指定导出堆信息时的路径或文件名**
3、直接使用jmap生成dump文件
jmap -dump:format=b,file=heapdump.hprof pid
自动生成到当前目录下