JVM常用的命令

标准: - 开头,所有的HotSpot都支持

非标准:-X 开头,特定版本HotSpot支持特定命令

不稳定:-XX 开头,下个版本可能取消

分析内存常用命令

jmap - histo 4655 | head -20,查找个数排名前20的对象
jmap -dump:format=b,file=filename pid 获取堆信息dump
top
top -Hp pid
jstack pid > log.txt //将堆栈信息输出到文件
jps//查看java进程pid
jstat -gc pid//查看gc回收情况
jstat -gcutil pid

jstack > stack

线程ID为十进制–>十六进制:printf “%x\n” xxx

jstack | grep 线程号的16进制 -A 10 -B 10 打印前后10行

查看class

1.java -verbose:class 查看jvm是否已加载该java类

几个常用的命令

  1. java -XX:+PrintCommandLineFlags HelloGC

  2. java -Xmn10M -Xms40M -Xmx60M -XX:+PrintCommandLineFlags -XX:+PrintGC HelloGC
    PrintGCDetails PrintGCTimeStamps PrintGCCauses

  3. java -XX:+UseConcMarkSweepGC -XX:+PrintCommandLineFlags HelloGC

  4. java -XX:+PrintFlagsInitial jvm的默认参数值 查找jvm的一些参数非常有用

  5. java -XX:+PrintFlagsFinal jvm的最终参数值

  6. java -XX:+PrintFlagsFinal | grep xxx 找到对应的参数

  7. java -XX:+PrintFlagsFinal -version |grep GC

  8. java -Xms20M -Xmx20M -XX:+UseParallelGC -XX:+HeapDumpOnOutOfMemoryError com.mashibing.jvm.gc.T15_FullGC_Problem01 内存溢出时打印堆信息

  9. 设定日志参数

    1. -Xloggc:/opt/xxx/logs/xxx-xxx-gc-%t.log

      -XX:+UseGCLogFileRotation

      -XX:NumberOfGCLogFiles=5

      -XX:GCLogFileSize=20M

      -XX:+PrintGCDetails

      -XX:+PrintGCDateStamps

      -XX:+PrintGCCause

    2. 或者每天产生一个日志文件

遗留问题

https://alibaba.github.io/arthas

G1的FGC

常见垃圾回收器组合

  • -XX:+UseConc(urrent)MarkSweepGC = ParNew + CMS + Serial Old
  • -XX:+UseParallelGC = Parallel Scavenge + Parallel Old (1.8默认) 【PS + SerialOld】
  • -XX:+UseParallelOldGC = Parallel Scavenge + Parallel Old
  • -XX:+UseG1GC = G1

GC常用参数

参数含义
-Xmn -Xms -Xmx -Xss年轻代 最小堆 最大堆 栈空间
-XX:+UseTLAB使用TLAB,默认打开 ,Thread Local Allocation Buffer,每个线程在堆空间默认开辟1%的空间
-XX:+PrintTLAB打印TLAB的使用情况
-XX:TLABSize设置TLAB大小
-XX:+DisableExplictGC禁止使用System.gc() ,他是FGC,默认是关闭的
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintHeapAtGC
-XX:+PrintGCTimeStamps
-XX:+PrintFlagsFinal -XX:+PrintFlagsInitial必须会用
java -XX:+PrintFlagsFinal -version grep G1
-Xloggc:opt/log/gc.log
-XX:MaxTenuringThreshold升代年龄,最大值15

Parallel常用参数

参数含义默认值
XX:SurvivorRatio默认811
XX:PreTenureSizeThreshold大对象到底多大
-XX:MaxTenuringThreshold
-XX:+ParallelGCThreads并行收集器的线程数,同样适用于CMS,一般设为和CPU核数相同
-XX:+UseAdaptiveSizePolicy自动选择各区大小比例

CMS常用参数

参数含义默认值
-XX:+UseConcMarkSweepGC
-XX:ParallelCMSThreadsCMS线程数量
-XX:CMSInitiatingOccupancyFraction使用多少比例的老年代后开始CMS收集
-XX:+UseCMSCompactAtFullCollectionFGC时压缩
-XX:CMSFullGCsBeforeCompaction多少次FGC后压缩
-XX:+CMSClassUnloadingEnabled
-XX:CMSInitiatingPermOccupancyFraction达到什么比例时进行Perm回收
GCTimeRatio设置GC时间占用程序运行时间的百分比
-XX:MaxGCPauseMillis停顿时间,是一个建议时间,GC会尝试用各种手段达到这个时间,比如减小年轻代
-XX:+CMSParallelRemarkEnable降低标记停顿
-XX:LagePageSizebytes
-XX:+UseFastAccessorMethods原始类型的快速优化
-XX:+UseCMSInitiatingOccupancyOnly使用手动定义初始化定义开始CMS收集 禁止hostspot自行触发CMS GC
CMS内存碎片解决方案-XX:+UseCMSCompactAtFullCollection 使用并发收集器时,开启对年老代的压缩.
-XX:CMSFullGCsBeforeCompaction 默认为0 指的是经过多少次FGC才进行压缩
–XX:CMSInitiatingOccupancyFraction 92% 可以降低这个值,让CMS保持老年代足够的空间

G1常用参数

参数含义默认值
-XX:+UseG1GC
-XX:MaxGCPauseMillis建议值,G1会尝试调整Young区的块数来达到这个值
-XX:GCPauseIntervalMillisGC时间间隔目标
-XX:+G1HeapRegionSize分区大小,建议逐渐增大该值,1 2 4 8 16 32。
随着size增加,垃圾的存活时间更长,GC间隔更长,但每次GC的时间也会更长
ZGC做了改进(动态区块大小)
G1NewSizePercent新生代最小比例,默认为5%
G1MaxNewSizePercent新生代最大比例,默认为60%
GCTimeRatioGC时间建议比例,G1会根据这个值调整堆空间
ConcGCThreads线程数量
-XX:+G1UseAdaptiveIHOP
-XX:InitiatingHeapOccupancyPercent=45
可以降低MixedGC触发的阈值,让MixedGC提早发生

参数列表

参数名称含义默认值
-Xms初始堆大小
-Xmx最大堆大小
-Xmn新生代大小
-XX:PermSize1.7之前的永久代
-XX:MaxPermSize1.7之前的永久代最大值
-Xss每个线程的堆栈大小1M
-XX:ThreadStackSizeThread Stack Size
-XX:NewRatio
-XX:SurvivorRatio
-XX:LargePageSizeInBytes
-XX:+DisableExplicitGC关闭System.gc()
-XX:+UseBiasedLocking
-XX:PretenureSizeThreshold对象超过多大是直接在旧生代分配
-XX:TLABWasteTargetPercent
并行收集器相关参数
-XX:+UseParallelGC使用PS回收器
-XX:+UseParallelOldGC使用PS回收器
-XX:ParallelGCThreads并行收集器的线程数
-XX:MaxGCPauseMillis每次年轻代垃圾回收的最长时间(最大暂停时间)
-XX:GCTimeRatio设置垃圾回收时间占程序运行时间的百分比
CMS相关参数
对CMS的理解CMS是parNew+CMS,CMS就是FGC,
当CMS搞不定了,就会让serialOld进行回收,
这是调优该避免的内容
-XX:+UseConcMarkSweepGC使用CMS
-XX:CMSFullGCsBeforeCompaction多少次FGC后进行压缩
-XX:+CMSParallelRemarkEnabled降低标记停顿
-XX+UseCMSCompactAtFullCollection在FULL GC的时候, 对年老代的压缩
-XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=70
常用命令
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintGCApplicationStoppedTime打印垃圾回收期间程序暂停的时间
-Xloggc:filenamegc日志信息存放的路径
-XX:+PrintTLAB

jconsole远程连接

  1. 程序启动加入参数:

    java -Djava.rmi.server.hostname=192.168.17.11 
    -Dcom.sun.management.jmxremote 
    -Dcom.sun.management.jmxremote.port=11111 
    -Dcom.sun.management.jmxremote.authenticate=false 
    -Dcom.sun.management.jmxremote.ssl=false XXX
    
  2. 如果遭遇 Local host name unknown:XXX的错误,修改/etc/hosts文件,把XXX加入进去

    192.168.17.11 basic localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    
  3. 关闭linux防火墙(实战中应该打开对应端口)

    service iptables stop
    chkconfig iptables off #永久关闭
    
  4. windows上打开 jconsole远程连接 192.168.17.11:11111

垃圾回收器组合

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BgycRfmE-1586139328726)(C:\Users\pp\AppData\Roaming\Typora\typora-user-images\image-20200406095311696.png)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

it_much_nice

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值