基于内存模型调优
JVM调优 计算内存模型大小 掌握、掌握、掌握这个是JVM优化的基础,jmap -heap 进程号 查看堆内存使用情况,记住理解下图,下面优化庖丁解牛了
开始整
JVM调优 :
jstat -jcutil + 进程编号
jmap histo: live +进程编号|head -n 20 打印堆栈前二十个
jinfo
查看JVM运行时的参数 : jinfo -flags 进程号
高亮显示程序端口号 : jinfo -flags 进程号 |grep port
查看系统的参数 jinfo sysprops 进程号
jstat
jstat -class 进程号 查看程序class大小
jstat -gc 进程号 查看gc
新生代gc回收 :jstat -gcnew 进程号
老年代gc回收 : jstat -gcold 进程号
元空间gc回收 :jstat -gcmetacapacity 进程号
查看垃圾回收: jstat -gcutil 进程号 1000 3 11666为pid,每隔1000毫秒打印一次,打印3次
jmap常用
jmap -heap 进程 打印堆栈信息
jmap -histo 进程号 > ./log.txt 查看实例对象占内存大小
jmap -histo:live 进程号 显示堆中对象的统计信息
命令:jmap -clstats 进程标号 描述:打印类加载器信息
命令:jmap -finalizerinfo 进程标号 描述:打印等待终结的对象信息
jmap -histo:live 4117| head -n 10 打印系统中占堆内存比最大类
java VisulVm 内存检测工具
图形化界面 :数据是同过JDK内的命令做的展示 : Jinfo Jstat
内存溢出 :生产上所加的参数 printGCDetails
打印内存溢出信息到指定文件: -XX: +HeapDumpOnOutOfMemoryError -XX: HeapDumpPath=:\jvm.dump
会生成内存快照 jvm.dump
注意:此命令尽量别再生产下搞,本地玩玩就行了,此过程会导致stop-the-world,一般dump文件也比较大,只有系统崩溃时,起到黑匣子作用。
printGCDetails : 打印指定时段的对内存信息
jstack 查看死锁
jstack + 进程编号
在jvisulVm直接dump下来就行了
查看程序持续时间:ps -eo pid,tty,user,comm,lstart,etime | grep 14121
GC常用参数
堆栈设置
-Xss:每个线程的栈大小
-Xms:初始堆大小,默认物理内存的1/64
-Xmx:最大堆大小,默认物理内存的1/4
-Xmn:新生代大小 默认占用堆内存1/3
-XX:NewSize:设置新生代初始大小
-XX:NewRatio:默认2表示新生代占年老代的1/2,占整个堆内存的1/3。
-XX:SurvivorRatio:默认8表示一个survivor区占用1/8的Eden内存,即1/10的新生代内存。
-XX:MetaspaceSize:设置元空间大小 目前项目未设置
-XX:MaxMetaspaceSize:设置元空间最大允许大小,默认不受限制,JVM Metaspace会进行动态扩展。
垃圾回收统计信息
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:filename
收集器设置
-XX:+UseSerialGC:设置串行收集器
-XX:+UseParallelGC:设置并行收集器
-XX:+UseParallelOldGC:老年代使用并行回收收集器
-XX:+UseParNewGC:在新生代使用并行收集器
-XX:+UseParalledlOldGC:设置并行老年代收集器
-XX:+UseConcMarkSweepGC:设置CMS并发收集器
-XX:+UseG1GC:设置G1收集器
-XX:ParallelGCThreads:设置用于垃圾回收的线程数
并行收集器设置
-XX:ParallelGCThreads:设置并行收集器收集时使用的CPU数。并行收集线程数。
-XX:MaxGCPauseMillis:设置并行收集最大暂停时间
-XX:GCTimeRatio:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)
CMS收集器设置
-XX:+UseConcMarkSweepGC:设置CMS并发收集器
-XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况。
-XX:ParallelGCThreads:设置并发收集器新生代收集方式为并行收集时,使用的CPU数。并行收集线程数。
-XX:CMSFullGCsBeforeCompaction:设定进行多少次CMS垃圾回收后,进行一次内存压缩
-XX:+CMSClassUnloadingEnabled:允许对类元数据进行回收
-XX:UseCMSInitiatingOccupancyOnly:表示只在到达阀值的时候,才进行CMS回收
-XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况
-XX:ParallelCMSThreads:设定CMS的线程数量
-XX:CMSInitiatingOccupancyFraction:设置CMS收集器在老年代空间被使用多少后触发
-XX:+UseCMSCompactAtFullCollection:设置CMS收集器在完成垃圾收集后是否要进行一次内存碎片的整理
G1收集器设置
-XX:+UseG1GC:使用G1收集器
-XX:ParallelGCThreads:指定GC工作的线程数量
-XX:G1HeapRegionSize:指定分区大小(1MB~32MB,且必须是2的幂),默认将整堆划分为2048个分区
-XX:GCTimeRatio:吞吐量大小,0-100的整数(默认9),值为n则系统将花费不超过1/(1+n)的时间用于垃圾收集
-XX:MaxGCPauseMillis:目标暂停时间(默认200ms)
-XX:G1NewSizePercent:新生代内存初始空间(默认整堆5%)
-XX:G1MaxNewSizePercent:新生代内存最大空间
-XX:TargetSurvivorRatio:Survivor填充容量(默认50%)
-XX:MaxTenuringThreshold:最大任期阈值(默认15)
-XX:InitiatingHeapOccupancyPercen:老年代占用空间超过整堆比IHOP阈值(默认45%),超过则执行混合收集
-XX:G1HeapWastePercent:堆废物百分比(默认5%)
-XX:G1MixedGCCountTarget:参数混合周期的最大总次数(默认8)
以上是我自己项目生产、测试环境中常用的一些命令,欢迎大家围观,有不对的及时指出,当然觉得不错的话来点赞也成。