Linux 查询基本信息
1.查看CPU核数
cat /proc/cpuinfo
2.查看内存占用情况
free -h/-m
JVM参数
-
-X
-Xmx5g #最大堆内存 -Xms5g #初始化堆内存 -Xss256k #栈内存大小
-
-XX
-XX:+HeapDumpOnOutOfMemoryError #堆溢出导出错误日志 -XX:MaxDirectMemorySize #NIO buff最大大小, 默认0,自动分配(与堆一样大) -XX:+PrintFlatsFinal #打印参数默认值 -XX:+UseCompressedOops #开启压缩(64位系统和32位系统对象大小一致) jdk1.6后, 默认开启 -XX:+UseCompressedClassPointers #指针压缩 -XX:+ExplicitGCInvokesConcurrent # 减少FullGC停留时间
-
开启GC日志(jdk9以前)
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:[file-path] -XX:+PrintReferenceGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M
-
开启GC日志(jdk9以后)
-Xlog:gc*,gc+ref=debug,gc+age=trace,gc+heap=debug:file=gc%p %t.log:tags,uptime,time:filecount=10,filesize=10m
-
-client
-
-server (2h2G 64位 服务器默认设置)
调优工具
jinfo -flats pid
jstat pid time 间隔时间(ms) 次数 查看堆内存
jstat -class pid
jstat -compiler pid
jstat -gc pid
jmap 汇总内存使用情况
jmap -heap pid
jmap -histo pid | more # 所有
jmap -histo:live pid | more # 活跃
jmap -dump:format=b,file=/dump.dat pid
jhat 工具
jhat -port 8888 file
MAT
Jstack pid
垃圾回收器
serial 串行 1.4 之前,client模式 stw 中断线程 复制算法
parallel 并行 大数据计算,后台计算 stw 中断线程
cms 与业务并行有短暂中断
HotSpot
新生代: serial, parNew, ParallelScavenge(吞吐量比parNew大, 大数据领域)
老年代:CMS(大内存, 缺点: 有垃圾碎片), Serial Old(标记整理算法) (CSS)[1.5, 1.6 不建议使用], ParallelOld
G1: 取消年轻代,老年代的划分(最大64G 内存)
G1适合8/16G以上的内存使用,原因在于G1rescan更快,清除垃圾时虽然是stop the world但是可控,CMS虽然是并发但是不可控,大块内存要回收会影响到应用程序的性能。另外由于G1在清理垃圾时使用STW,所以可以采用标记整理算法,没有内存碎片问题
https://www.jianshu.com/p/9c6be3b92dc6