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.rhkb.cn/news/437670.html

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

相关文章

热网无线监测系统/config.aspx接口存在反射性XSS漏洞

漏洞描述 热网无线监测系统/config.aspx接口存在反射性XSS漏洞 漏洞复现 FOFA body"Downloads/HDPrintInstall.rar" || body"skins/login/images/btn_login.jpg" POC IP/config.aspx POC <script>alert(1)</script> 点击确认成功弹窗1

目前最好用的爬虫软件是那个?

作为一名数据工程师&#xff0c;三天两头要采集数据&#xff0c;用过十几种爬虫软件&#xff0c;也用过Python爬虫库&#xff0c;还是建议新手使用现成的软件比较方便。 这里推荐3款不错的自动化爬虫工具&#xff0c;八爪鱼、亮数据、Web Scraper 1. 八爪鱼爬虫 八爪鱼爬虫是一…

【Linux庖丁解牛】—Linux基本指令(中)!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a; Linux庖丁解牛 &#x1f516;克心守己&#xff0c;律己则安 目录 1、rmdir与rm指令 2、man指令 3、cp指令 4、mv指令 5、cat与tac指令 6、重定向 7、more指令 8、…

OpenCV第十二章——人脸识别

1.人脸跟踪 1.1 级联分类器 OpenCV中的级联分类器是一种基于AdaBoost算法的多级分类器&#xff0c;主要用于在图像中检测目标对象。以下是对其简单而全面的解释&#xff1a; 一、基本概念 级联分类器&#xff1a;是一种由多个简单分类器&#xff08;弱分类器&#xff09;级联组…

Harmony商城项目

目录&#xff1a; 1、启动项目看效果图2、首页和购物车代码分析2.1、首页代码分析2.2、女装页面代码分析2.3、购物车页面代码分析2.4、购物车结算代码 3、个人中心代码分析 1、启动项目看效果图 2、首页和购物车代码分析 2.1、首页代码分析 import CommonConstants from ../co…

海外合规|新加坡推出智慧国2.0计划 设新网络安全与保障机构

智慧国2.0计划&#xff1a;政府将成立新机构杜绝网络伤害和援助受害者。政府将成立新机构&#xff0c;并制定新法令&#xff0c;以杜绝网络伤害行为和为受害者提供更多援助与保障。新加坡总理兼财政部长黄循财星期二&#xff08;10月1日&#xff09;在推介晚宴上&#xff0c;宣…

SOCKS5代理和HTTP代理哪个快?深度解析两者的速度差异

在现代互联网环境中&#xff0c;使用代理IP已经成为了许多人日常生活和工作的必备工具。无论是为了保护隐私&#xff0c;还是为了访问某些特定资源&#xff0c;代理IP都扮演着重要的角色。今天&#xff0c;我们就来聊聊SOCKS5代理和HTTP代理&#xff0c;看看这两者到底哪个更快…

9. 正则表达式

编程工具和技术是以一种混乱、进化的方式生存和传播的。获胜的并不总是最好或最杰出的工具&#xff0c;而是那些在合适的利基市场中发挥足够好的功能&#xff0c;或者恰好与另一项成功的技术相结合的工具。 在本章中&#xff0c;我将讨论这样一种工具--正则表达式。正则表达式是…

【Android 14源码分析】Activity启动流程-3

忽然有一天&#xff0c;我想要做一件事&#xff1a;去代码中去验证那些曾经被“灌输”的理论。                                                                                  – 服装…

【C++】C++基础

目录 一. C关键字(C98) 二、C的第一个程序 三、命名空间 3.1.namespace的价值 3.2.namespace的定义 3.2.命名空间使用 总结&#xff1a;在项目当中第一、第二种方法搭配使用&#xff0c;第三种冲突风险非常大&#xff0c;仅适合练习使用。 四、C输入&输出 五、缺省…

python之with

with上下文管理是什么呢&#xff1f; 一般都是使用系统提供的一些with语句&#xff0c;列如我要去读取一些数据进行分析&#xff0c;就可以使用with open去读取某些数据&#xff0c;或者我要把一些图片给他保存到某些地方&#xff0c;可以用with给他写入。 上下午管理器with是…

html5 + css3(上)

目录 HTML认知web标准vscode的简介和使用注释标题和段落换行和水平线标签文本格式化标签图片图片-基本使用图片-属性 绝对路径相对路径音频标签视频标签超链接 HTML基础列表列表-无序和有序列表-自定义 表格表格-使用表格-表格标题和表头单元格表格-结构标签&#xff08;了解&a…

SQL:函数以及约束

目录 介绍 函数 字符串函数 数值函数 日期函数 流程函数 约束 总结 介绍 说到函数我们都不陌生,在C,C,java等语言中都有库函数,我们在平时也是经常使用,函数就是一段代码,我们既可以自定义实现,又可以使用库里内置的函数;从来更加简洁方便的完成业务;同样的在SQL中也有…

五子棋双人对战项目(4)——匹配模块(解读代码)

目录 一、约定前后端交互接口的参数 1、websocket连接路径 2、构造请求、响应对象 二、用户在线状态管理 三、房间管理 1、房间类&#xff1a; 2、房间管理器&#xff1a; 四、匹配器(Matcher) 1、玩家实力划分 2、加入匹配队列&#xff08;add&#xff09; 3、移除…

【C语言指南】数据类型详解(上)——内置类型

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C语言指南》 期待您的关注 目录 引言 1. 整型&#xff08;Integer Types&#xff09; 2. 浮点型&#xff08;Floating-Point …

java发送邮件email实战

1.首先在项目中增加依赖&#xff0c;在pom文件中添加如下坐标 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>2.发邮件工具类如下 package com.example.demo.…

力扣 —— 多数元素 轮转数组

多数元素 题目(简单) 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1&#xff1a; 输入&#xff1a; nums [3,2,3] 输…

第24天sql注入(小迪安全学习)

前置知识&#xff08;搭建环境失败&#xff0c;搞不了实验了&#xff0c;学下理论知识吧&#xff09; sql注入 脚本代码在实现代码与数据库进行数据通讯时&#xff08;从数据库中取出相关数据&#xff09;&#xff0c;将定义的SQL语句进行执行查询数据时其中的SQL语句能通过参…

VSOMEIP代码阅读整理(1) - 网卡状态监听

一. 概述 在routing进程所使用的配置文件中&#xff0c;存在如下配置项目&#xff1a;{"unicast" : "192.168.56.101",..."service-discovery" :{"enable" : "true","multicast" : "224.244.224.245",…

Oracle 表空间时间点恢复

已有一个数据库全备&#xff0c;在PDB中恢复被drop掉的表空间 1.新建表空间 create tablespace PITR_TBS datafile /u01/app/oracle/oradata/PRODCDB/PDBPROD2/PITR_TBS01.dbf size 10m; 2.使用RMAN备份. backup as compressed backupset database INCLUDE CURRENT CONTROLFI…