JVM优化工具及jvm参数配置

1、堆设置

  • -Xms:堆内存的最小值
  • -Xmx:堆内存的最大值
  • -Xmn:堆内存中新生代的初始化大小
  • -XX:newSize:表示堆内存中新生代初始化的最小值,应该小于-Xms的值;
    -XX:MaxnewSize:表示堆内存中新生代初始化的最大值;当然这个值应该小于-Xmx的值;
    -Xmn:至于这个参数则是相当于对 -XX:newSize、-XX:MaxnewSize两个参数的同时配置,也就是说如果通过-Xmn来配置新生代的内存大小,那么-XX:newSize = -XX:MaxnewSize = -Xmn,虽然会很方便,但需要注意的是这个参数是在JDK1.4版本以后才使用的
    
  • -XX:NewRatio:设置新生代和老年代的比值。如:为3,表示年轻代与老年代比值为1:3
  • -XX:SurvivorRatio:新生代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:为8,表示Eden:Survivor=8:2,一个Survivor区占整个新生代的1/8
  • -XX:MaxTenuringThreshold:设置转入老年代的存活次数。如果是0,则直接跳过新生代进入老年代

   栈设置

  • -Xss 设置每个线程可使用的内存大小,即栈的大小。在相同物理内存下,减小这个值能生成更多的线程,当然操作系统对一个进程内的线程数还是有限制的,不能无限生成。线程栈的大小是个双刃剑,如果设置过小,可能会出现栈溢出,特别是在该线程内有递归、大的循环时出现溢出的可能性更大,如果该值设置过大,就有影响到创建栈的数量,如果是多线程的应用,就会出现内存溢出的错误。

   方法区

  • -XX:PermSize:表示非堆区(方法区)初始内存分配的最小值
  • -XX:MaxPermSize:表示对非堆区(方法区)分配的内存的最大值
  • -XX:MetaspaceSize、-XX:MaxMetaspaceSize:分别设置元空间最小大小与最大大小(Java8以后,以前叫做持久代并且占用内存在堆里,1.8之后在方法区中)

 


2、收集器设置

  • -XX:+UseSerialGC:设置串行收集器
  • -XX:+UseParallelGC:设置并行收集器
  • -XX:+UseParalledlOldGC:设置并行老年代收集器
  • -XX:+UseConcMarkSweepGC:设置并发收集器

3、垃圾回收统计信息

  • -XX:+PrintGC
  • -XX:+PrintGCDetails
  • -XX:+PrintGCTimeStamps
  • -Xloggc:filename


4、并行收集器设置

  • -XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数。并行收集线程数。
  • -XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间
  • -XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)


5、并发收集器设置

  • -XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况。
  • -XX:ParallelGCThreads=n:设置并发收集器新生代收集方式为并行收集时,使用的CPU数。并行收集线程数。

1、liunx上使用命令查看jvm各项参数

  • jps (JVM Process Status): 类似 UNIX 的 ps 命令。查看所有 Java 进程的启动类、传入参数和 Java 虚拟机参数等信息;
    • 用法:
    • jps -q :只输出进程的本地虚拟机唯一 ID
    • jps -l    输出主类的全名,如果进程执行的是 Jar 包,输出 Jar 路径。
    • jps -v:输出虚拟机进程启动时 JVM 参数。(经常使用,类似ps - ef |grep java 但比这个显示更清晰)
    • jps -m:输出传递给 Java 进程 main() 函数的参数。
  • .jstat命令:jstat 它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据
    • jstat -class vmid :显示 ClassLoader 的相关信息;
    • jstat -compiler vmid :显示 JIT 编译的相关信息;
    • jstat -gc vmid :显示与 GC 相关的堆信息;
    • jstat -gccapacity vmid :显示各个代的容量及使用情况;
    • jstat -gcnew vmid :显示新生代信息;
    • jstat -gcnewcapcacity vmid :显示新生代大小与使用情况;
    • jstat -gcold vmid :显示老年代和永久代的信息;
    • jstat -gcoldcapacity vmid :显示老年代的大小;
    • jstat -gcpermcapacity vmid :显示永久代大小;
    • jstat -gcutil vmid :显示垃圾收集信息;
    • 另外,加上 -t参数可以在输出信息上加一个 Timestamp 列,显示程序的运行时间。
    • 比如 jstat -gc -h3 31736 1000 10表示分析进程 id 为 31736 的 gc 情况,每隔 1000ms 打印一次记录,打印 10 次停止,每 3 行后打印指标头部。
  • jstack主要用来查看某个Java进程内的线程堆栈信息,jstack可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码。
    • 1、首先使用jps找到需要查看的进程pid
    • 2、接着找出该进程最消耗CPU的线程,可以使用top -Hp 26048或者ps -Lfp 26048来查看该进程中线程的cpu消耗情况
    • 3、查看到线程26094的消耗CPU时间是最长的,用命令查看该线程的十六进制值
    • [root@dzt-test-5-52 promotion-core]#  printf "%x\n" 26094
      65ee
      
      查询到的值65ee用于下面jstack 定位信息(jstack 进程号|grep 65ee)
      
      [root@dzt-test-5-52 promotion-core]# jstack 26048|grep 65ee
      "redisson-netty-4-5" #34 prio=5 os_prio=0 tid=0x00007fa3462cd000 nid=0x65ee runnable [0x00007fa2e4bd7000]
      
      
      这样就可以看到redisson-netty-4-5是最耗时的类,然后就可以去代码审查代码了。

  • 工具使用有jdk自带的监控和管理控制台JConsole和java VisualVM(安装插件)这个也挺好用的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值