用户工具

站点工具


java:jvm

JVM内存调优

java -XX:+PrintFlagsFinal -version,参数默认值
jps -lvm,查看java进程
jinfo -flags pid,查看jvm参数
jstat -gc pid,查看GC次数
jmap -heap pid,查看堆内存情况
jcmd pid GC.run,强制gc
ps Hp pid|wc -l,查看线程个数
jstat -gc pid S0C+S1C+EC+OC+MC+CCSC 236m 78m 50m
S0C 幸存区1容量k 10240.0 10m 2.375m 1.25m
S1U 幸存区2已用k survivor 10m 2.375m 1.25m
EC 年轻代容量k Eden 80m 19.25m 10.56m
OU 老年代已用k Old 96m 24m 13m
MC 元数据 Metaspace 36.5m 26.25m 21m
CCSU 代码区 Class Cache 4.25m 3m 3m
YGC 年轻代gc次数 YGCT 年轻代gc耗时(秒) <10ms
FGC 老年代gc次数 FGCT 老年代gc耗时 GCT 总时间

重要指标:线程数,老年代比例,gc平均耗时

  jstack -l 11935|grep "^\""|cut -d "\"" -f 2|sort  //输出线程名称
  内存分配:Heap=Old+(Eden+Survivor*2),Eden=S*8,S和Old分配2^N兆(2的幂)
  -Xmx336m -Xms336m -XX:NewSize=80m -XX:MaxNewSize=80m  //64+8*2+256
  -Djava.compiler=none -Xmx26m -Xms26m -XX:NewSize=10m -XX:MaxNewSize=10m //8+1*2+16
  -XX:+DisableExplicitGC -Xmx1664m -Xms1664m -XX:NewSize=640m -XX:MaxNewSize=640m  //512+64*2+1024

参数说明

  -server -Djava.awt.headless=false,服务端模式,无键鼠显示器等
  -Djava.net.preferIPv4Stack=true,仅支持ipv4,lsof -i:8080查看
  -Xms256m -Xmx256m,堆内存大小,默认新生代:老年代=1:2,-XX:NewRatio=2
  -XX:NewSize=100m -XX:MaxNewSize=100m,新生代=伊甸园8+幸存区1×2,默认伊甸园:幸存区=8:1,-XX:SurvivorRatio=8
  -XX:PermSize=128m -XX:MaxPermSize=128m,永生代(非堆),Java8+使用-XX:MetaspaceSize、-XX:MaxMetaspaceSize
  -Xss228k,堆栈大小
  -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/tmp/heapdump.bin
  -Djava.compiler=none //关闭JIT省内存,默认打开性能高,https://www.cnblogs.com/LBSer/p/3703967.html
  -Duser.timezone=GMT+8,时区可能造成难以发现的bug,1986-05-05,/usr/share/zoneinfo/Asia/Chungking,Date不同

内存分析

jmap -histo pid,查看对象详细情况
jmap -dump:format=b,file=path pid,导出内存信息
jcmd 37320 GC.heap_dump /opt/tmp/heapdump.bin
jstack -l pid|tee -a threads.log 导出线程堆栈
top -H -p pid 列出线程Shift+T按耗时排序

1C1G

Xmx="488m"
Xmn="120m"
SR="10"
MTT="36"
PM="68m"
Xss="228k"
JAVA_OPTS="-server -Xms$Xmx -Xmx$Xmx -Xmn$Xmn -XX:SurvivorRatio=$SR -XX:MaxTenuringThreshold=$MTT -XX:PermSize=$PM -XX:MaxPermSize=$PM -Xss$Xss -Djava.awt.headless=true"

2C4G

  -server -Xms1536m -Xmx1536m -Xmn512m -XX:SurvivorRatio=10 -XX:PermSize=96m -XX:MaxPermSize=96m -Xss228k -XX:+UseBiasedLocking -XX:+UseParNewGC -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:ParallelGCThreads=2 -Djava.awt.headless=true

gc

  Serial,Serial Old,1.3标记-整理,Mark-Compact,单核
  ParNew,CMS,1.5多线程,响应时间
  Parallel Scavenge,Parallel Old,1.6标记-清除,Mark-Sweep,吞吐量
  G1,高并发
  
java/jvm.txt · 最后更改: 2020/06/09 18:13 由 admin