jvm监控及问题排查

本文详述了Java虚拟机JVM的监控与问题排查,涵盖了内存区域、垃圾回收器、常用监控工具如jps、jinfo、jstat、jmap、jhat和jstack的使用,并给出了CPU占用过高问题的排查步骤。
摘要由CSDN通过智能技术生成

jvm监控及问题排查

一、简介

这里对运行中的java虚拟机jvm(hotspot虚拟机,其上运行着java程序)监控及问题排查进行介绍。

二、知识点

2.1 jvm内存区域

jvm内存划分为几个不同的区域,如下:

  1. 程序计数器:线程私有(每个线程都有独立的程序计数器),记录当前线程执行的字节码指令。
  2. 虚拟机栈(本地方法栈类似):线程私有,方法执行时会创建栈帧,方法的执行过程对应着栈帧在虚拟机栈中从入栈到出栈的过程。
  3. java堆:所有线程共享,存放对象实例和数组。通常分为新生代(包含eden区、from service区、to service区)和老年代。堆的大小可以通过-Xms和-Xmx控制。
  4. 方法区:所有线程共享,用于存储jvm加载的类信息、常量、静态变量等数据。按分代划分,可称为永久代,使用-XX:MaxPermSize设置上限。
2.2 常用垃圾回收器

java中内存是动态分配的,对用就有垃圾收集,采用的算法有标记-清除(mark-sweep)算法、复制(copying)算法、标记-整理(mark-compact)算法。垃圾收集针对的是java堆和方法区(程序计数器、虚拟机栈、本地方法栈为线程私有,随着线程生和灭)。常用垃圾收集器有:

  1. Serial收集器:单线程收集器,垃圾收集时会暂停(stop the world)其他所有工作线程,直到收集结束。简单高效,用于新生代收集。
  2. ParNew收集器:serial收集器的多线程版本。用于新生代收集。
  3. Parallel Scavenge收集器:采用复制算法、并行的、吞吐量优先的多线程收集器。用于新生代收集。
  4. Serial old收集器:采用标记-整理算法的单线程收集器。serial收集器的老年代版本。用于老年代收集。
  5. Parallel old收集器:采用标记-整理算法的多线程收集器。parallel scavenge收集器的老年代版本。用于老年代收集
  6. cms(concurrent mark sweep)收集器:采用标记-清除算法、最短停顿时间的多线程收集器。
  7. G1收集器:整体采用标记-整理算法、基于region(整个java堆划分为多个大小相等的独立区域)管理整个堆(不需要其他收集器配合)、降低和可预测停顿的多线程收集器。
2.3 监控的内容

监控的内容有:

  1. jvm配置信息
  2. jvm内存使用
  3. jvm线程信息

三、常用工具

3.1 jps

查看jvm进程。

格式:jps [option]
option:
-l:显示运行类的完整包
-q:只显示进程号
-m:显示给main方法的参数
-v:显示给jvm的完整参数

示例:

输入:jps -l
输出:
17419 com.dragon.study.msa_register_center.MsaRegisterCenterApplication
3.2 jinfo

查看虚拟机配置信息。

格式:jinfo vmid
3.3 jstat

查看堆内存使用情况,类加载的数量等。

格式:jstat [ -option vmid [ interval [s|ms] [count] ] ]
option:
-options:查看可用参数
-class:类加载统计
-compiler
-gc:查看堆内存各区域使用情况
-gccapacity
-gccause:堆内存各区域使用占比,以及最后一次和当前(当前可能没有)引发垃圾回收的诱因
-gcmetacapacity
-gcn
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值