JVM参数
1.JVM(Java Virtual Machine)
1.-Xms 初始堆大小
2.-Xmx 最大堆大小
3.-Xmn 青年代大小
4.-Xss 每个线程的堆栈大小
5.-XX:+UseParNewGC 青年代垃圾收集方式为并行收集
6.-XX:+UseParallelOldGC 老年代垃圾收集方式为并行收集
7.-XX:ParallelGCThreads 并行收集器的线程数(最好与处理器数目相等)
8.-XX:MaxGCPauseMillis 每次青年代垃圾回收的最长时间(最大暂停时间)
9.-XX:+UseAdaptiveSizePolicy 自动选择青年代区大小和相应的Survivor区比例
10.-XX:GCTimeRatio 设置垃圾回收时间占程序运行时间的百分比
11.-XX:+ScavengeBeforeFullGC Full GC前调用YGC
21.-XX:NewSize 青年代大小(for 1.3/1.4)
22.-XX:MaxNewSize 青年代最大值(for 1.3/1.4)
23.-XX:PermSize 设置持久代(perm gen)初始值
24.-XX:MaxPermSize 持久代最大值
2.CMS(Concurrent Mark-Sweep)
以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。对于要求服务器响应速度的应用上,这种垃圾回收器非常适合。在启动JVM参数加上-XX:+UseConcMarkSweepGC ,这个参数表示对于老年代的回收采用CMS。CMS采用的基础算法是:标记—清除。
1.-XX:+UseConcMarkSweepGC 使用CMS内存收集
2.-XX:CMSFullGCsBeforeCompaction 多少次后进行内存压缩
3.-XX:+CMSParallelRemarkEnabled 降低标记停顿
4.-XX+UseCMSCompactAtFullCollection 在FULL GC的时候, 对年老代的压缩
5.-XX:+UseCMSInitiatingOccupancyOnly 使用手动定义初始化定义开始CMS收集
6.-XX:CMSInitiatingOccupancyFraction=70 使用cms作为垃圾回收,使用70%后开始CMS收集
7.-XX:CMSInitiatingPermOccupancyFraction 设置Perm Gen使用到达多少比率时触发
8.-XX:+CMSIncrementalMode 设置为增量模式
工具
jmap -gc pid 1000 1000. # 查看pid这个进程的gc情况,1000ms刷新一次
jstat -dump:live,format=b,file=filePath.hprof pid # dump当前的堆栈信息 会full gc
# 线程占用查看
jps 查看运行的进程
top -Hp <pid> 查看CPU占用
拿到cpu最高的,转16进制
jstack <pid> | grep 0xe -A 30
jstack pid > threadDump.tdump # 下载线程文件
jcmd pid VM.flags # 查看JVM参数
参数设置
Java整个堆大小设置,Xmx 和 Xms设置为老年代存活对象的3-4倍,即FullGC之后的老年代内存占用的3-4倍
永久代 PermSize和MaxPermSize设置为老年代存活对象的1.2-1.5倍。
年轻代Xmn的设置为老年代存活对象的1-1.5倍。
老年代的内存大小设置为老年代存活对象的2-3倍。
BTW:
1、Sun官方建议年轻代的大小为整个堆的3/8左右, 所以按照上述设置的方式,基本符合Sun的建议。
2、堆大小=年轻代大小+年老代大小, 即xmx=xmn+老年代大小 。 Permsize不影响堆大小。
3、为什么要按照上面的来进行设置呢? 没有具体的说明,但应该是根据多种调优之后得出的一个结论。
https://blog.csdn.net/zhelong19830726/article/details/108584535
https://blog.csdn.net/Xeon_CC/article/details/109080695