1)JVM参数
-Xms6000M 堆的初始化内存大小
-Xmx6000M 堆的最大内存/这两个保持一致,配置为可用内存的80%左右
-Xss512k 每个线程的栈大小,因为栈里面只存局部变量和对象引用,所以很小
-XX:NewSize=2250M 新生代内存大小
-XX:MaxNewSize=2250M 新生代最大内存
-XX:PermSize=128M 永久代内存大小(JDK1.7)
-XX:MaxPermSize=256M 永久代内存大小(JDK1.7)
-XX:MetaSpaceSize=128M 元空间内存大小(JDK1.8)
-XX:MaxMetaSpaceSize=256M 元空间内存大小(JDK1.8)
2)调优工具
2.1)JDK自带工具
包括jps jstat jstack jmap jvisualVM
a)Jps:罗列出目前在服务器上运行的java程序及进程ID

b)Jstat:用于输出java程序内存使用情况,包括新生代、老年代、元数据区容量、垃圾回收情况。
S0:幸存1区当前使用比例
S1:幸存2区当前使用比例
E:伊甸园区使用比例
O:老年代使用比例
M:元数据区使用比例
CCS:压缩使用比例
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间

c)Jmap:用于输出java程序中内存对象的情况,包括有哪些对象,对象的数量。
把内存镜像DUMP下来,然后交给MAT工具进行分析

d)Jstack:用户输出java程序线程栈的情况,常用于定位因为某些线程问题造成的故障或性能问题。
先用top -hp定位哪些线程占用的CPU和内存资源较多,然后把线程ID转成16进制,然后在jstack输出的线程栈信息中找到对应的线程,进行分析。
比如,分析有没有阻塞的线程,有没有死锁的线程,有没有一起在Running的线程等。


e)JvisualVm:对CPU、内存、线程、类都做了监控

2.2)其它工具
MAT(memory analyzer tool),用来分析jmap导出的dump文件。

网友评论