设置堆和栈大小:
-Xms64m -Xmx512m -Xss128k
设置malloc分区数
启动脚本加:export MALLOC_ARENA_MAX=1
禁用分层编译,减少code区
-XX:-TieredCompilation
启动G1内存动态回收,会定期释放堆内存还给OS
-XX:+UseG1GC -XX:+G1Uncommit -XX:MaxHeapFreeRatio=30 -XX:MinHeapFreeRatio=10 -XX:G1PeriodicGCInterval=90000
设置环境变量:
export MALLOC_ARENA_MAX=1
G1 uncommit
-XX:+UseG1GC -XX:+G1Uncommit -XX:MaxHeapFreeRatio=40 -XX:MinHeapFreeRatio=10 -XX:G1PeriodicGCInterval=60000
定时回收堆外内存
-XX:+UnlockExperimentalVMOptions -XX:+GCTrimNativeHeap -XX:GCTrimNativeHeapInterval=60
关闭一些数据采集(会使jstat工具不可用)
-XX:-UsePerfData
常用调测命令:
查看堆内存统计:
使用jmap -heap 26786
打印内存占用统计:
修改启动脚本增加
-XX:NativeMemoryTracking=summary
执行命令打印统计
jcmd 4615 VM.native_memory
释放内存
jcmd xxx System.trim_native_trip
打开JFR开关:
jcmd 21393 VM.unlock_commercial_features
启动5分钟的JFR
jcmd 21393 JFR.start name=test settings=profile delay=5s duration=5m filename=XX
将生成的JFR文件拿到PC上用JMC或jprofile工具分析
网上很多工具都可以生成火焰图,推荐skj(又叫java瑞士军刀,https://github.com/rongfengliang/jfr-sjk-flame-graph-learning)
java -jar sjk.jar flame -f output.jfr -o jfr.html
nohup java -Xmx1024m -Xms128m -XX:+UseG1GC -XX:+DisableExplicitGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+PrintGCCause -Xloggc:d:/gslog/qms/gc-%t.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=50M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${D:\gslog\oomlog} -jar qms-admin.jar &
正常的GC频率
YGC:10秒1次
FGC:1天1次以内
正常的GC时间
YGC:100ms以内
FGC:1秒以内









网友评论