JVM线上常用参数、常用工具以及异常排查

3 篇文章 0 订阅

数据区设置

  • Xms:初始堆大小
  • Xmx:最大堆大小
  • Xss:Java 每个线程的Stack大小
  • XX:NewSize=n:设置年轻代大小
  • XX:NewRatio=n:设置年轻代和年老代的比值。如:为 3,表示年轻代与年老代比值为 1:3,年轻代占整个年轻代年老代和的 1/4。
  • XX:SurvivorRatio=n:年轻代中 Eden 区与两个 Survivor 区的比值。注意 Survivor区有两个。如:3,表示 Eden:Survivor=3:2,一个 Survivor 区占整个年轻代的 1/5。
  • XX:MaxPermSize=n:设置持久代大小。

收集器设置

  • XX:+UseSerialGC:设置串行收集器
  • XX:+UseParallelGC::设置并行收集器
  • XX:+UseParalledlOldGC:设置并行年老代收集器
  • XX:+UseConcMarkSweepGC:设置并发收集器
  • XX:+UseG1GC:G1收集器,Java9默认开启,无需设置

注:服务端jvm参数调优可移步------->:https://blog.csdn.net/Vincent2014Linux/article/details/90211192

JVM 提供的常用工具

1、jps:用来显示本地的 Java 进程,可以查看本地运行着几个 Java 程序,并显示他们的进程号。
命令格式:jps

2、jinfo:运行环境参数:Java System 属性和 JVM 命令行参数,Java class path 等信息。
命令格式:jinfo 进程 pid

3、jstat:监视虚拟机各种运行状态信息的命令行工具。
命令格式:jstat -gc 123 250 20

4、jstack:可以观察到 JVM 中当前所有线程的运行情况和线程当前状态。
命令格式:jstack 进程 pid

5、jmap:观察运行中的 JVM 物理内存的占用情况(如:产生哪些对象,及其数量)。
命令格式:jmap [option] pid
-dump:[live,]format=b,file= 使用hprof二进制形式,输出jvm的heap内容到文件, live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.
-finalizerinfo 打印正等候回收的对象的信息.
-heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.
-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计 活的对象数量.
-permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.
使用示例:jmap -heap 27900 # 展示pid的整体堆信息如下:

[root@localhost ~]# jmap -heap 27900
Attaching to process ID 27900, please wait...
Debugger attached successfully.
Client compiler detected.
JVM version is 20.45-b01
using thread-local object allocation.
Mark Sweep Compact GC
Heap Configuration: #堆内存初始化配置
   MinHeapFreeRatio = 40     #-XX:MinHeapFreeRatio设置JVM堆最小空闲比率  
   MaxHeapFreeRatio = 70   #-XX:MaxHeapFreeRatio设置JVM堆最大空闲比率  
   MaxHeapSize = 100663296 (96.0MB)   #-XX:MaxHeapSize=设置JVM堆的最大大小
   NewSize = 1048576 (1.0MB)     #-XX:NewSize=设置JVM堆的'新生代'的默认大小
   MaxNewSize = 4294901760 (4095.9375MB) #-XX:MaxNewSize=设置JVM堆的'新生代'的最大大小
   OldSize = 4194304 (4.0MB)  #-XX:OldSize=设置JVM堆的'老生代'的大小
   NewRatio = 2    #-XX:NewRatio=:‘新生代’和'老生代'的大小比率
   SurvivorRatio = 8  #-XX:SurvivorRatio=设置年轻代中Eden区与Survivor区的大小比值
   PermSize = 12582912 (12.0MB) #-XX:PermSize=<value>:设置JVM堆的'持久代'的初始大小  
   MaxPermSize = 67108864 (64.0MB) #-XX:MaxPermSize=<value>:设置JVM堆的'持久代'的最大大小  
Heap Usage:
New Generation (Eden + 1 Survivor Space): #新生代区内存分布,包含Eden+1个Survivor区
   capacity = 30212096 (28.8125MB)
   used = 27103784 (25.848182678222656MB)
   free = 3108312 (2.9643173217773438MB)
   89.71169693092462% used
Eden Space: #Eden区内存分布
   capacity = 26869760 (25.625MB)
   used = 26869760 (25.625MB)
   free = 0 (0.0MB)
   100.0% used
From Space: #其中一个Survivor区的内存分布
   capacity = 3342336 (3.1875MB)
   used = 234024 (0.22318267822265625MB)
   free = 3108312 (2.9643173217773438MB)
   7.001809512867647% used
To Space: #另一个Survivor区的内存分布
   capacity = 3342336 (3.1875MB)
   used = 0 (0.0MB)
   free = 3342336 (3.1875MB)
   0.0% used
tenured generation:   #当前的Old区内存分布  
   capacity = 67108864 (64.0MB)
   used = 67108816 (63.99995422363281MB)
   free = 48 (4.57763671875E-5MB)
   99.99992847442627% used
Perm Generation:     #当前的 '持久代' 内存分布
   capacity = 14417920 (13.75MB)
   used = 14339216 (13.674942016601562MB)
   free = 78704 (0.0750579833984375MB)
   99.45412375710227% used

异常排查

  • CPU 资源占用过高
    1、top 查看当前 CPU 情况,找到占用 CPU 过高的进程 PID=123。
    2、top -H -p123 找出两个 CPU 占用较高的线程,记录下来 PID=2345, 3456 转换为十六进制。
    3、jstack -l 123 > temp.txt 打印出当前进程的线程栈。
    4、查找到对应于第二步的两个线程运行栈,分析代码。

  • OOM 异常排查
    1、使用 top 指令查询服务器系统状态。
    2、ps -aux|grep java 找出当前 Java 进程的 PID。
    3、jstat -gcutil pid interval 查看当前 GC 的状态。
    4、jmap -histo:live pid 可用统计存活对象的分布情况,从高到低查看占据内存最多的对象。
    5、jmap -dump:format=b,file= 文件名 [pid] 利用 Jmap dump。
    6、使用性能分析工具对上一步 dump 出来的文件进行分析,工具有 MAT 等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值