JVM和GC监控技术

一、监控技术简介

  1. JVM是什么?
  2. 项目里面有JVM吗?
  3. JVM跟Tomcat有什么关系?
  4. 为什么需要去分析JVM?
1. JVM(全称:Java Virtual Machine),Java虚拟机

是Java程序运行的环境,它是一个虚构的计算机,相当于电脑安装系统一样,可以运行应用程序,很多应用使用java语言开发,java最大特点跨平台(windows、linux),真正的java程序在java虚拟机上运行

在这里插入图片描述
如上图:JDK、JRE、JVM:JDK(开发工具包)包含了JRE(运行环境),运行时类、库,JRE包含了JVM(java虚拟机)

2. 项目里面有JVM吗?

让tomcat运行起来,就需要有JRE,而JRE自带了JVM

3. JVM跟Tomcat有什么关系?
  • 一个tomcat是一个java进程,其中有很多线程(与有多少个app无关)
  • 一个tomcat启动一个JVM,其中可以有很多APP
  • 一个tomcat中部署的多个APP,虽然同处一个JVM,但是由于无法相互调用,可以认为是分布式的
4. 为什么需要去分析JVM?

JVM对于tomcat来说就相当于运行系统

二、JVM的生命周期

  1. JVM实例诞生:
    当启动一个java程序时,一个JVM实例就诞生了,任何一个拥有public void main(String[] args)函数的class都可以作为JVM实例运行的起点
  2. JVM实例运行:
    main()作为该程序初始线程的起点,任何其他线程均有该线程启动,JVM内部有两种线程,守护线程和非守护线程,main()属于非守护线程,守护线程通常由JVM自己使用,java程序也可以标明自己创建的线程是守护线程
  3. JVM实例的消亡:
    当程序中的所有非守护线程都终止时,JVM才退出

三、JVM的GC机制

  1. GC概述

    • garbage collection是进程查看堆内存,分辨哪些对象还在被使用中,哪些对象已经不再使用,并删除不再使用的对象的过程
      • 被使用:指程序中的某些部分仍然由对对象的引用
      • 不再被使用:就是指没有任何部分持有该对象的引用,对于不再被使用的对象,其消耗的内存可以被回收重用,(没有保护(守护线程)就回收掉,释放掉更多的内存给需要的线程使用)
  2. GC分代回收机制:

    • GC分代回收机制(java8 HotSpot分代)
      在这里插入图片描述
    • 上图是JAVA8的HotSpot的分代策略
    • eden+S0+S1合起来称为年轻代(Young Generation),GC非常频繁
    • S0+S1 称为幸存区(Survivor Space)
    • Tenured称为老年代(Old Generation)
    • metasnace:元空间(存放不回收的东西)
年轻代(Young Generation):
  • Java应用在分配Java对象时,这些对象会被分配到年轻代堆空间中去
  • . 这个空间大多是小对象并且频繁回收
老年代(Old Generation):
  • 年轻代堆空间的长期存活对象会转移到(也许是永久性转移)年老代堆空间
  • 这个堆空间通常比年轻代的堆空间大,并且其空间增长速度较缓
持久代(metasnace):JDK8之后叫元空间
  • 存放JVM和Java类的元数据(metadata),以及interned字符串和类的静态变量

GC的回收过程:刚开始对象都会被分配到年轻代中,在年轻代中的对象会被进行计数,被频繁使用的对象会被调到幸存区(S0,S1)中,当对象经历多次GC仍然没有被清理,该对象会被认为有一个较长的生命周期,从而被移到年老代中,当年老代中对象到达一定数量时会自动fullgc一次清理掉。当然堆的大小都是可以修改的,结合当前机器的资源修改。
GC频率:当内存达到一定阈值的时候,触发阈值后自动回收(内存小很快到达阈值就会触发GC,内存大,需要很久才达到阈值)

Tips:eden被GC,如果没有被回收掉(进程还没释放,还有守护线程),就+1次,最高15之后被放到S0或S1继续GC,S0和S1互斥,eden要么分给SO,要么分S1,同样如果在S0或S1没有被GC掉,达到15次就会进入Tenured(老年代),到了老年代就不怎么GC或者GC很慢很慢

四、内存回收策略

  1. 回收策略:Mark-Sweep 标记清除,copying算法,Mark-Compact 标记压缩

    内存回收策略优点缺点
    Mark-Sweep 标记清除清除较快删除时会产生碎片,不够放大对象
    copying算法清理的同时进行整理,可以存放大对象浪费一半的空间
    Mark-Compact 标记压缩标记的时候进行整理,可以存放大对象速度慢,效率较低
  2. Mark-Sweep 标记清除如下图:适合老年代(只管回收,不管整理)
    在这里插入图片描述
    Tips:例如餐厅吃饭有空余的桌子空出来了,未使用的空间腾出来了,不做整理,只做标记

  3. copying算法 如下图:适合年轻代,S0和S1(浪费空间),如图要么使用上面一半,要么使用下面一半
    要么使用S0,要么使用S1,不会两个都用
    在这里插入图片描述

  4. Mark-Compact 标记压缩:JC不频繁,适合老年代
    在这里插入图片描述

Tips:
了解JAVA自己的回收机制,更有助于压测,内存如果不用了需要回收释放掉,如果不释放,就会报内存溢出
堆内存:先进先出(例如:进餐厅吃饭,先来的吃完先走)
栈内存:先进后出(例如:有一叠盘子,先放在最下面的最后使用)

五、查看项目使用的jdk版本

  1. 命令:java -version
    在这里插入图片描述
  2. 通过tomcat项目内查看
    进入到tomcat的bin目录下:cd /usr/local/tomcat7-8083/bin
    执行如下:./version.sh
    在这里插入图片描述
  3. 还可以通过tomcat的bin目录下的配置文件查看
    执行命令:cat catalina.sh
    在这里插入图片描述
  4. 设置如下
    在这里插入图片描述
    Xms 起始堆内存
    Xmx 最大堆内存
    PermSize 永久代,在1.8之后称之为元空间
    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/tomcat7-8083/bin/dushi.hprof
    如果出现内存溢出,在对应的路径生成一个hprof文件
    -XX:NewRatio=2 新生代和老年代的比例(不写默认1:2),2代表年轻代占1,老年代占2

六:JVM性能监测工具visualvm安装及配置

  1. 下载地址 https://visualvm.github.io/download.html
    JDK1.8之前自带JvisualVM,不需要下载,直接使用.在java的bin目录下,可以找到JvisualVM.exe
    JDK比较新的版本,不自带这个工具,那么需要下载并安装.工具的名字也变为了VisualVM
    默认在C盘:C:\Program Files\Java\jdk1.8.0_211\bin

  2. 双击打开,如果需要监控GC,那么要配置一个GC插件,工具→插件→可用插件,选择visual GC,点击左下角的安装
    如果自行安装的版本,需要在运行之前进行配置,进入viusalvm的etc目录,打开visualvm.conf,在大约72行的位置添加一行jdk的路径:visualvm_jdkhome=“你的jdk的路径”
    在这里插入图片描述

  3. JVM性能监测工具visualvm远程连接服务器的两种方式

    1. JMX方式连接(这种方式没有GC监控),能看线程死锁
      复制一个catalina-jmx-remote.jar到tomcat服务器的/usr/local/tomcat7-8083/lib然后重启tomcat,就可以连接上了,如果仍然不能连接,那么大多数情况是防火墙拒绝访问,此时可以关闭防火墙,或者将10001添加到白名单
      systemctl stop firewalld #关闭防火墙
      firewall-cmd --add-port=10001/tcp --permanent #将10001端口添加到白名单
      catalina-jmx-remote.jar:支持jmx方式连接的一个扩展包
      在这里插入图片描述
      在这里插入图片描述

    2. 进入 cd /usr/local/tomcat7-8083/bin,打开catlina.sh
      加入以下几句代码
      -Djava.rmi.server.hostname=192.168.197.132
      -Dcom.sun.management.jmxremote.port=10001
      -Dcom.sun.management.jmxremote.ssl=false
      -Dcom.sun.management.jmxremote.authenticate=false’

      -Djava.rmi.server.hostname=192.168.197.160 填写你的都市商城的IP
      -Dcom.sun.management.jmxremote.port=10001 jmx的端口
      -Dcom.sun.management.jmxremote.ssl=false 不使用SSL连接
      -Dcom.sun.management.jmxremote.authenticate=false 不进行用户验证
      之后保存并退出
      在这里插入图片描述

      重启tomcat,就可以访问了

    3. jstatd方式连接(这种方式没有CPU监控)
      参考之前博客:JVisuaIVM监控Jstatd启动时报错

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/55317.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Netty 与 WebSocket之间的关系

WebSocketProtocolHandler 和 Netty 在处理 WebSocket 连接时扮演不同的角色,但它们通常是一起使用的,尤其是在基于 Netty 的项目中。为了更好地理解它们之间的区别,我们首先需要了解 WebSocket 和 Netty 的基本概念。 WebSocket WebSocket…

RK3568平台(显示篇)车机图像显示偏白问题分析

一.显示偏白图片对比 正常图像: 偏白图像: 二.分析过程

51单片机系列-按键检测原理

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 独立按键是检测低电平的。 下面我们来看一张对应的电路原理图: 在这张图当中,P1,P2,P3内部都上拉了电阻,但是P0没有&am…

day03 笔试练习

1.简写单词 题目链接&#xff1a;简写单词_牛客题霸_牛客网 public static void main(String[] args) {Scanner sc new Scanner(System.in);while(sc.hasNext()){ // 输入多少读入多少char ch sc.next().charAt(0); // 提取首字母if(ch > a && ch < z){System…

项目定位与服务器(SERVER)模块划分

目录 定位 HTTP协议以及HTTP服务器 高并发服务器 单Reactor单线程 单Reactor多线程 多Reactor多线程 模块划分 SERVER模块划分 Buffer 模块 Socket模块 Channel 模块 Connection模块 Acceptor模块 TimerQueue模块 Poller模块 EventLoop模块 TcpServer模块 SE…

ElementUI el-tree 树组件 增加辅助线

需求 项目需求给elementUI的el-tree添加辅助线&#xff0c;并且不能使用其他插件&#xff0c;没办法只能该样式了。 效果 代码 html <template><div><el-scrollbar class"long-content"><el-tree node-key"id":data"deptTre…

Android 简单实现联系人列表+字母索引联动效果

效果如上图。 Main Ideas 左右两个列表左列表展示人员数据&#xff0c;含有姓氏首字母的 header item右列表是一个全由姓氏首字母组成的索引列表&#xff0c;点击某个item&#xff0c;展示一个气泡组件(它会自动延时关闭)&#xff0c; 左列表滚动并显示与点击的索引列表item …

k8s搭建一主三从的mysql8集群---无坑

一&#xff0c;环境准备 1.1 k8s集群服务器 ip角色系统主机名cpumem192.168.40.129mastercentos7.9k8smaster48192.168.40.130node1centos7.9k8snode148192.168.40.131node2centos7.9k8snode248192.168.40.132node3centos7.9k8snode348 k8s集群操作请参考《K8s安装部署&…

算法种类丰富,分析准确率业内领先的智慧能源开源了

一、简介 AI视频监控平台, 是一款功能强大且简单易用的实时算法视频监控系统。愿景在最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;减少企业级应用约 95%的开发成本&#xff0c;在强大视频算…

Java | Leetcode Java题解之第450题删除二叉搜索树中的节点

题目&#xff1a; 题解&#xff1a; class Solution {public TreeNode deleteNode(TreeNode root, int key) {TreeNode cur root, curParent null;while (cur ! null && cur.val ! key) {curParent cur;if (cur.val > key) {cur cur.left;} else {cur cur.rig…

docker快速安装ELK

一、创建elk目录 创建/elk/elasticsearch/data/目录 mkdir -p /usr/local/share/elk/elasticsearch/data/ 创建/elk/logstash/pipeline/目录 mkdir -p /usr/local/share/elk/logstash/pipeline/ 创建/elk/kibana/conf/目录 mkdir -p /usr/local/share/elk/kibana/conf/ 二、创建…

基于ESP8266—AT指令连接阿里云+MQTT透传数据(1)

在阿里云创建MQTT产品的过程涉及几个关键步骤,主要包括注册阿里云账号、实名认证、开通MQTT服务实例、创建产品与设备等。以下是详细的步骤说明: 一、准备工作 访问阿里云官网,点击注册按钮,填写相关信息(如账号、密码、手机号等)完成注册。注册完成后,需要对账号进行实…

FOC电机驱动开发踩坑记录

关键技术 SVPWM电机磁场控制电流采样park变换和Clark变换滑膜观测器&#xff08;无感FOC&#xff09; SVPWM电机磁场控制 SVPWM主要思想是通过精确的对UVW三相电流的分时控制&#xff0c;来控制转子的合成力矩&#xff0c;达到目标方向&#xff0c;常用的是6分区的设计&…

Ubuntu 安装 Docker Compose

安装Docker Compose # 删除现有的 docker-compose&#xff08;如果存在&#xff09; sudo rm -f /usr/local/bin/docker-compose ​ # 下载最新的 docker-compose 二进制文件 sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-…

C++平台跳跃游戏

目录 开头程序Game.cpp源文件Player.h头文件Player.cpp源文件 程序的流程图程序游玩的效果下一篇博客要说的东西 开头 大家好&#xff0c;我叫这是我58。 程序 Game.cpp源文件 #include <iostream> #include "Player.h" using namespace std; void printma…

scrapy爬取汽车、车评数据【上】

这个爬虫我想分三期来写&#xff1a; ✅ 第一期写如何爬取汽车的车型信息&#xff1b; ✅ 第二期写如何爬取汽车的车评&#xff1b; ✅ 第三期写如何对车评嵌入情感分析结果&#xff0c;以及用简单的方法把数据插入mysql中&#xff1b; 技术基于scrapy框架、BERT语言模型、mysq…

JQuery基本介绍和使用方法

JQuery基本介绍和使用方法 W3C 标准给我们提供了⼀系列的函数, 让我们可以操作: ⽹⻚内容⽹⻚结构⽹⻚样式 但是原⽣的JavaScript提供的API操作DOM元素时, 代码⽐较繁琐, 冗⻓. 我们可以使⽤JQuery来操作⻚⾯对象. jQuery是⼀个快速、简洁且功能丰富的JavaScript框架, 于20…

【Spring】Spring Boot项目创建和目录介绍

文章目录 1 Spring Boot 介绍2 Spring Boot 项目创建注意事项 3. 项目代码和目录介绍pom 文件父工程目录介绍 1 Spring Boot 介绍 Spring 让 Java 程序更加快速、简单和安全&#xff0c;Spring 对于速度、简单性和生产力的关注使其成为世界上最流行的 Java 框架 Spring 官方提…

用Python+flask+mysql等开发的Excel数据资产落地工具

话不多说 1)Excel文件上传,列表预览 2)选中要导入结构及数据的Excel文件 约束说明: 2.1)Excel文件的第一行约定为表头名称 2.2)系统自动识别字段列名及数据类型,目前不支持合并表头 3)Excel建表导入数据成功后,可在表源列表中预览查看 4)对数据表源可进行透视图设计管理,可对…

叉车防撞系统方案,引领安全作业新时代

在现代工业的舞台上&#xff0c;叉车如同忙碌的“搬运工”&#xff0c;在仓储和制造环境中发挥着不可或缺的作用。然而&#xff0c;随着叉车使用频率的不断攀升&#xff0c;安全事故也如影随形&#xff0c;给企业带来经济损失的同时&#xff0c;更严重威胁着操作人员的生命安全…