JVM理论(七)性能监控与调优

概述

 性能优化的步骤

  • 性能监控:就是通过以非强行或入侵方式收集或查看应用程序运行状态,包括如下问题

    • GC频繁
    • CPU过载过高
    • OOM
    • 内存泄漏
    • 死锁
    • 程序响应时间较长
  • 性能分析:通常在系统测试环境或者开发环境进行分析
    • 通过查看程序日志以及GC日志,或者运用命令行工具如jstack、jmap、jinfo等
    • 导出dump快照文件,利用内存分析工具分析文件
    • 使用阿里的arthas或者jprofiler、jconsole、jvisualvm等查看jvm状态
  • 性能优化:目的就是改善应用程序的响应时间或者吞吐量
    • 更改程序参数、
    • 源代码
    • 属性配置

注意: 为何要调优?防止出现OOM以及解决OOM和减少FGC出现的次数

JVM命令行监控工具 (适用于无GUI环境下的服务器环境且已安装完整JDK的条件下使用)

  • jps: java process status 表示查看正在运行的java进程
    • -l: 输出应用程序主类的全类名

  • jstat: 查看JVM统计信息,包括虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据
    • -class: classLoader相关信息
    • -gc: 显示与GC相关信息
-gc +Pid(进程id):显示各指标信息
-gcutil +Pid(进程id) +internal(间隔多少毫秒):显示每间隔时间下各指标信息
-gcnew+Pid(进程id):显示新生代区信息
-gcold+Pid(进程id):显示新生代区信息
  • jinfo: 实时查看和修改jvm的配置参数信息
  • jmap: 导出内存映像文件即JVM堆快照dump文件
    • -dump:file=C:/tmp/dump.hprof 4040 --表示将java进程ID(4040)的堆快照文件导出到C:/tmp/dump.hprof(常常结合jps使用)
  • jhat: jdk自带堆分析工具(jdk9以后已删除该命令,官方建议使用visualVM代替)
  • jstack: 打印jvm中线程快照(即每条线程正在执行的方法的堆栈集合),常常用于定位线程出现长时间停顿的原因,如死锁、死循环、请求外部资源导致长时间等待
    • 在thread dump中,重点关注如下几种状态
    • 死锁: Deadlock
    • 等待资源: Waiting on condition
    • 等待获取监视器: Waiting on monitor entry
    • 阻塞: Blocked

 

JVM监控及诊断的GUI工具

visual VM(jdk自带产品)

比jconsole工具强大多了

Jprofiler(商业收费,功能全面)

window下可视化分析工具

Arthas(目前市场上比较流行,可以集成到项目中,在系统运行过程中动态查看内存等相关状态)

注意:

        a.从官网下载arthas后确保本地jdk已安装成功;

        b.系统正常运行后,启动arthas进行诊断监测项目。(选择项目pid进行后续诊断)

阿里的开源产品组件,官网:简介 | arthas

window下可视化分析工具

 

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

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

相关文章

《零基础入门学习Python》第070讲:GUI的终极选择:Tkinter7

上节课我们介绍了Text组件的Indexs 索引和 Marks 标记,它们主要是用于定位,Marks 可以看做是特殊的 Indexs,但是它们又不是完全相同的,比如在默认情况下,你在Marks指定的位置中插入数据,Marks 的位置会自动…

yaml语法详解

#kv #对空格的严格要求十分高 #注入到我们的配置类中 #普通的keyvalue name: qinjiang#对象 student:name: qingjiangage: 3#行内写法 student1: {name: qinjiang,age: 3}#数组 pets:- cat- dog- pigpet: [cat,dog,pig]yaml可以给实体类赋值 person:name: kuangshenage: 19happ…

Android onTouchEvent方法不触发ACTION_UP的解决方法

Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN://触摸、按下setImageResource(R.mipmap.ic_music);break;case MotionEvent.ACTION_UP://抬起setImageResource(R.mipmap.ic_launcher);break;}return sup…

ERROR 1064 - You have an error in your SQL syntax;

ERROR 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near (/, 少个逗号吧,以前开始写SQL,特别是修改SQL的时候容易出现这样错误。 而且自己也知道在附近…

前端异常错误处理(包括但不限于react,vue)

错误异常发生 页面js报错请求报错页面资源加载报错promise异常iframe加载异常页面奔溃&卡顿异常 处理异常的方法 1、react 自带的errorBoundaries 2、 react 自定义Hooks 3、 vue errorHandler 4、try catch 对特定的代码进行捕获 5、window.addEventListerner …

【深度学习】日常笔记15

训练集和测试集并不来⾃同⼀个分布。这就是所谓的分布偏移。 真实⻛险是从真实分布中抽取的所有数据的总体损失的预期,然⽽,这个数据总体通常是⽆法获得的。计算真实风险公式如下: 为概率密度函数 经验⻛险是训练数据的平均损失,⽤…

【MySQL主从复制】

目录 一、MySQL Replication 1.概述 2.优点 二、MySQL复制类型 1.异步复制(Asynchronous repication) 2.全同步复制(Fully synchronous replication) 3.半同步复制(Semisynchronous replication) 三…

【Rust 基础篇】Rust FFI:连接Rust与其他编程语言的桥梁

导言 Rust是一种以安全性和高效性著称的系统级编程语言,具有出色的性能和内存安全特性。然而,在现实世界中,我们很少有项目是完全用一种编程语言编写的。通常,我们需要在项目中使用多种编程语言,特别是在与现有代码库…

ava版知识付费平台免费搭建 Spring Cloud+Spring Boot+Mybatis+uniapp+前后端分离实现知识付费平台

提供私有化部署,免费售后,专业技术指导,支持PC、APP、H5、小程序多终端同步,支持二次开发定制,源码交付。 Java版知识付费-轻松拥有知识付费平台 多种直播形式,全面满足直播场景需求 公开课、小班课、独…

Rust ESP32C3开发

Rust ESP32C3开发 系统开发逐步使用Rust语言,在嵌入式领域Rust也逐步完善,本着学习Rust和ESP32的目的,搭建了ESP32C3的环境,过程中遇到了不少问题,予以记录。 ESP-IDF开发ESP32 这一部分可跳过,是使用C开…

tensorflow错误及解决办法

tf.graph 节点没有数据 tensorflow.python.framework.errors_impl.InvalidArgumentError: Retval[2] does not have value.通过TensorFlow Retval[0] does not have value启发,怀疑是通过tf.cond构建网络图的时候,一次只走一个分支,导致另一…

docker更新jenkins

下载文件 1、jenkins提示下载 2、官网下载jenkins官网 文件放服务器内 通过工具把jenkins.war放进服务器例如tmp 文件复制到docker的jenkins容器 docker cp 路径文件 容器id:/{后面不接内容为根路径} docker cp /tmp/jenkins.war 53dc1c71058a:/进入容器内 docker exec …

golang实现多态

Go 通过接口来实现多态。在 Go 语言中,我们是隐式地实现接口。一个类型如果定义了接口所声明的全部方法,那它就实现了该接口。现在我们来看看,利用接口,Go 是如何实现多态的。 package mainimport "fmt"type Income in…

实训笔记7.28

实训笔记7.28 7.28笔记一、Hive的基本使用1.1 Hive的命令行客户端的使用1.2 Hive的JDBC客户端的使用1.2.1 使用前提1.2.2 启动hiveserver21.2.3 使用方式 1.3 Hive的客户端中也支持操作HDFS和Linux本地文件 二、Hive中DDL语法2.1 数据库的管理2.1.1 创建语法2.1.2 修改语法2.1.…

日期清洗的sql函数

sql语言是postgressql。 函数只处理了 中国格式 : xxxx年-xx月-xx日 美国格式: mm/dd/yyyy, September 04,1991, September 1991, sept 04, 1991 uunix格式: yyyy/mm/dd, yyyy/mm&am…

python测试开发面试常考题:装饰器

目录 简介 应用 第一类对象 装饰器 描述器descriptor 资料获取方法 简介 Python 装饰器是一个可调用的(函数、方法或类),它获得一个函数对象 func_in 作为输入,并返回另一函数对象 func_out。它用于扩展函数、方法或类的行为。 装饰器模式通常用…

【学习笔记】[ZJOI2019] 开关

之前没认真学 F W T FWT FWT可惜了😅 首先要做过这道题 [AGC034F] RNG and XOR 。 考虑 I F W T IFWT IFWT算法的本质🤔 之前我们注意到将 k k k的顺序调换并不会影响结果,也就是说只要做一遍 F W T FWT FWT,然后再除以 2 n 2^…

【数据结构】实验十一:图

实验十一 图 一、实验目的与要求 1)掌握图的存储表示与操作实现。 2)掌握图的连通性及其应用。 二、 实验内容 1.用邻接表存储一个图形结构,并计算每个顶点的度。 2. 采用深度和广度优先搜索算法,遍历上述这张图,…

vue 实现拖拽效果

实现方式:使用自定义指令可以实现多个面板拖拽互不影响 1.自定义指令 js directives: {// 拖拽drag(el) {el.onmousedown function (e) {let x e.pageX - el.offsetLeftlet y e.pageY - el.offsetTopdocument.onmousemove function (e) {el.style.left e.pag…

placeholder样式自定义(uniapp 微信小程序、h5)

一、使用uniapp开发 ①第一种方式&#xff1a;&#xff08;写在行内&#xff09; <input type"text" placeholder"姓名" placeholder-style"font-size:28rpx;color:#999999;" />②第二种方式&#xff1a; &#xff08;给input加上placeho…