JVM 调优
JVM 参数
堆内存相关
指定堆内存大小:
sh-Xms2G -Xmx5G指定新生代(young generation)大小:
sh-XX:NewSize=256m -XX:MaxNewSize=1024m或者这样: (NewSize 和 MaxNewSize 设为一致)
sh-Xmn1024m设定新生代和老年代的比值: (1:1)
sh-XX:NewRatio=1指定永久代大小:
sh-XX:PremSize=N -XX:MaxPremSize=N指定元空间大小:
sh-XX:MetaspaceSize=N -XX:MaxMetaspaceSize=N
GC 相关
指定使用哪一款收集器:
sh-XX:+UseSerialGC -XX:+UseParallelGC -XX:+UseParNewGC -XX:UseG1GC记录 GC 活动
sh-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=<number of log files> -XX:GCLogFileSize=<file size>[unit] -Xloggc:/path/to/gc.log
工具
命令行
jps: java 进程的本地 vmid 和启动类 (shell
- l 主类的全类名
- v 启动时参数
- m main()的参数
jstat: 监控运行状态的命令行工具 (shell
- class vmid: ClassLoader 信息
- compiler vmid: JIT 编译信息
- gc vmid: GC 相关的堆信息
- gccapacity vmid: 各个代的容量及使用情况
- gcnew vmid: 新生代
- gcnewcapcacity vmid: 新生代大小与使用情况
- gcold vmid: 老年代和永久代, jdk1.8 永久代无了
- gcoldcapacity vmid: 老年代的大小
- gcpermcapacity vmid: 永久代大小, jdk1.8 无了
- gcutil vmid: 垃圾收集信息
jinfo: 虚拟机参数, 能看能改 (shell
- vmid: 全部系统属性和 VM 参数
- flag {name} vmid: 显示具体参数
jmap: 生成堆转储快照 (文件
如果不使用 jmap, 可以通过命令-XX:+HeapDumpOnOutOfMemoryError在 OOM 的时候自动生成 dump 文件- dump
jhat: 分析 heapdump 文件 (浏览器
jstack: 线程快照 (shell
图形化
Jconsole
Visual VM: 很牛逼的
启动
sh
java -Dloader.path=\libs -Dfile.encoding=utf-8 -jar mes-app-1.0.2.jar