5. JVM调优工具详解及调优实战(这里有我的实战案例预制构件生产管理平台)

news2024/11/17 23:42:22

1. Jmap,Jstack,Jinfo命令详解

1.1 Jmap

此命令可以用来查看内存信息,实例个数以及占用内存大小
jps 先查看有哪些java程序
在这里插入图片描述

  • jmap -histo 16492 > ./log.txt
    在这里插入图片描述
    在这里插入图片描述
  • jmap -heap 16492
    查看堆的信息
    在这里插入图片描述

查看堆年轻代老年代的使用情况

在这里插入图片描述

  • 堆内存dump (导一个快照出来)
    jmap -dump:format=b,file=eureke.hprof 16492

在这里插入图片描述
这里生成了一个文件
在这里插入图片描述
然后我们使用jvisualvm

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
主要看这里

在这里插入图片描述
这里我们可以设置内存溢出自动导入dump文件(内存很大的时候,可能会导不出来)

  1. -XX:+HeapDumpOnOutOfMemoryError
  2. -XX:HeapDumpPath=./(路径)

在这里插入图片描述
这里生成了一个dump文件,将他载入jvisualvm

在这里插入图片描述
这里我们就可以看到user很多

在这里插入图片描述

1.2 Jstack

用Jstack加进程ID查找死锁

代码如下

pubilc class test{

    private static Object lock1 = new Object();
    private static Object lock2 = new Object();


    public static void main(String[] args) {

        new Thread(()->{
            synchronized (lock1){
                try {
                    System.out.println("thread1 begin");
                    Thread.sleep(5000);
                }catch (InterruptedException e){

                }
                synchronized (lock2){
                    System.out.println("thread1 end");
                }
            }
        }).start();

        new Thread(()->{
            synchronized (lock2){
                try {
                    System.out.println("thread2 begin");
                    Thread.sleep(5000);
                }catch (InterruptedException e){

                }
                synchronized (lock1){
                    System.out.println("thread2 end");
                }
            }
        }).start();

        System.out.println("main thread end");


    }
}

在这里插入图片描述
这里就死锁了
这个是我死锁的线程
在这里插入图片描述
使用jstack

在这里插入图片描述
死锁的位置

在这里插入图片描述
这里对应代码的行数 有些许区别

在这里插入图片描述
用jvisualvm也可以识别死锁

在这里插入图片描述

  • jstack找出CPU占用最高的堆栈信息
    这里举个例子
package com.qm.boot.web.part.controller;

import com.qm.boot.web.admin.entity.SysUser;

public class Test {

    public static  final int initData = 666;
    public static SysUser sysUser = new SysUser();

    public int compute(){ //每一个方法对应一块栈帧内存区域
        int a = 1;
        int b = 1;
        int c = (a+b)+10;
        return c;
    }

    public static void main(String[] args) {

        Test test = new Test();
        while (true){
            test.compute();
        }

    }

}


这个代码不断死循环,一定会让cpu变高

在这里插入图片描述
在这里插入图片描述

1.3Jinfo

查看正在运行的java程序的扩展参数
查看JVM参数

在这里插入图片描述
在这里插入图片描述

1.4 Jstat (用的最多的)

jstat 命令可以查看堆得各部分使用情况,以及加载类的数量

jstat -gc pid 最常用,可以评估程序内存使用及GC压力整体情况
在这里插入图片描述

  • YGC :从启动开始执行的youngGc
  • YGCT:从启动开始花费了多少秒
  • FGC:从启动开始发生了多少次fullGc
  • FGCT:从启动开始fullGc花费了多少秒
  • GCT:youngGc和fullGc花费时间之和

jstat -gc 14904 1000 10

在这里插入图片描述
这里我们可以看到元空间基本被使用完了

这里有个问题 我们发现刚刚启动项目 我们发现做了35次minorJc 4次full Gc 那么肯定有问题,
那么我们怎么处理一下呢,

首先画一个内存模型

在这里插入图片描述
几乎实在20秒内,这肯定不可以,那么我们处理一下

  • 我估计是开启了动态年轻判断机制,就是s0太小了 每次超过了50% 那么就会想old区域 放入数据,old 放满之后触发fullGC
  • 那么我觉得可以调大新生代的内存 开始占了堆内存的3分之1 ,那么我调成三分之二,然后确实fullGC 没了

在这里插入图片描述

  • 然后我估计为什么频繁的出发了minor Jc ,那么在调大点比例
    这个方法可以修改-XX:NewRatio=4,表示新生代占1,老年代占4,新生代占整个堆的1/5,
    当然开发人员可以通过选项“-XX :SurvivorRatio”调整这个空间比例。比如-XX : SurvivorRatio=8

然后扩大一下内存那么最后变成了

在这里插入图片描述
这是最后的调优参数

-Xmx1024M -Xms1024M -Xmn768M -Xss1M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M

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

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

相关文章

Matlab:tftb-0.2时频工具箱安装小记

Matlab:tftb-0.2时频工具箱安装小记一、安装过程记录1、解压缩:2、将解压缩后的文件夹复制到自己的Matlab安装目录工具箱下;3、打开Matlab设置路径:设置路径4、测试是否安装成功:5、小试牛刀叮嘟!这里是小啊…

【ASE+python学习】-批量识别石墨烯团簇结构中的吡啶氮,并删除与其相连的氢

批量识别石墨烯团簇结构中的吡啶氮,并删除与其相连的氢文章背景任务内容程序实现思路实现代码建立标准结构中边缘碳与氢的位置差值标准数据集读入待修改结构,识别氮与氢位置差值是否存在标准数据集代码细节剖析文章背景 在科研工作中,我的工…

STM32系列(HAL库)——串口IAP

前言 IAP(In Application Programming)即在应用编程,IAP 是用户自己的程序在运行过程中对 User Flash 的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产 品中的固件程序进行更新升级。 设备具备IAP功能…

javaScript学习———变量概述 变量的使用 变量语法扩展 变量命名规范交换 变量案例

博主每篇博文的浪漫主义: 【东京girl秀场上那些甜度爆表的女孩子们。💖】 https://www.bilibili.com/video/BV1pG411F7KT/?share_sourcecopy_web&vd_source385ba0043075be7c24c4aeb4aaa73352 东京girl秀场上那些甜度爆表的女孩子们。💖…

计算机组成原理--------12.4---------开始

计算机硬件的基本组成 冯诺依曼计算机的特点 冯诺依曼首次提出“存储程序”概念 计算机由五大部件组成:I/O设备(输入输出),存储器(存放数据和程序),运算器(算术运算、逻辑运算&…

[附源码]JAVA毕业设计科研项目审批管理系统(系统+LW)

[附源码]JAVA毕业设计科研项目审批管理系统(系统LW) 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目…

关于解释型语言和编译性语言的区别

关于博主每篇博文的浪漫主义 【初恋是整遍《手写的从前》】 https://www.bilibili.com/video/BV1JP411g7qF/?share_sourcecopy_web&vd_source385ba0043075be7c24c4aeb4aaa73352 初恋是整遍《手写的从前》能够知道解释性语言和编译型语言的特点能够知道标识符不能是关键字…

docker_重装mysql

1.docker ps 查看docker正在运行的容器 2.docker stop xxx 停止正在运行的mysql 3.docker pull mysql:5.7 docker拉取mysql指定版本的镜像 docker pull mysql docker拉取最新版本的镜像 4.docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD123456 mysql:…

PHP代码审计系列(一)

PHP代码审计系列&#xff08;一&#xff09; 本系列将收集多个PHP代码安全审计项目从易到难&#xff0c;并加入个人详细的源码解读。此系列将进行持续更新。 extract变量覆盖 源码如下 <?php$flagextractFlag.txt; extract($_GET);if(isset($shiyan)){ $contenttrim(f…

YOLO算法创新改进系列(项目汇总)

&#x1f680;&#x1f680;&#x1f680;——YOLO算法创新改进系列项目汇总——&#x1f384;&#x1f384;&#x1f384; &#x1f680; YOLO算法创新改进系列 &#xff08;项目汇总&#xff09;&#x1f384;&#x1f388; &#x1f340; 改进YOLOv5/YOLOv7——魔改YOLOv5/Y…

文件操作及IO

目录 一、文件的分类 二、文件路径 三、File 常见方法 1、get 相关方法使用 2、文件的创建和删除 3、遍历目录下所有文件 四、文件读写 一、文件的分类 站在程序员的角度&#xff0c;文件通常可以分为两类&#xff1a; 文本文件&#xff1a;以字符形式存储二进制文件&…

Java基于SSM的海淘商城系统

随着计算机网络的普及,电子商务的兴起,网络支付以及网络安全体系逐渐完善,人们的生活进入了网络时代,越来越多的人习惯于乐于网上购物,只需上网轻轻点击鼠标便能够买到心仪商品。 本系统主要是针对广大网络消费者而开发的,专为网络消费者打造,建设一个”全球购”海淘商城系统。…

Redis学习笔记(五)

主从复制 单机redis的风险和问题 机器故障&#xff1a;硬盘故障、系统崩溃容量瓶颈&#xff1a;内存不足&#xff0c;无限升级内存结论&#xff1a;为了避免单点redis服务器故障&#xff0c;准备多台服务器互相连通&#xff0c;将数据复制多个副本保存在不同的服务器上&#xf…

Vue 官方文档2.x教程学习笔记 1 基础 1.5 计算属性和侦听器 1.5.2 侦听器

Vue 官方文档2.x教程学习笔记 文章目录Vue 官方文档2.x教程学习笔记1 基础1.5 计算属性和侦听器1.5.2 侦听器1 基础 1.5 计算属性和侦听器 1.5.2 侦听器 虽然计算属性在大多数情况下更合适&#xff0c;但有时也需要一个自定义的侦听器。 这就是为什么 Vue 通过 watch 选项提…

图像处理:模糊图像判断

目录 上期回顾 采用Laplace算子的原因 实现的效果 图片素材 代码的展示与讲解 效果展示 项目资源 上期回顾 上一次的图像清晰度评价没有成功&#xff0c;主要的原因是那几张图像清晰度评价函数都实际都采用了梯度求解&#xff0c;不同的场景灰度的明暗不同&#xff0c;…

数据结构栈的实现

目录栈的概念栈的结构声明初始化数据入栈出栈判断栈是否为空取栈顶的值销毁栈栈的概念 栈是一种线性表&#xff0c;插入数据的一端叫栈顶&#xff0c;另一端叫栈底。 入栈&#xff1a;数据从栈顶进入栈中 出栈&#xff1a;数据从栈顶删除 所以&#xff0c;栈的特点就是先进后出…

Spark - OnYARN 模式搭建,并使用 Scala、Java、Python 三种语言测试

一、SparkOnYarn搭建 安装前需要提前安装好 hadoop 环境&#xff0c;关于 HDFS 和 Yarn 集群的搭建可以参考下面我的博客&#xff1a; https://blog.csdn.net/qq_43692950/article/details/127158935 下面是我 Hadoop 的安装结构 主机规划设置主机名角色192.168.40.172node1N…

1. STL六大组件

0. 介绍 STL提供六大组件&#xff0c;它们之间可以彼此套用&#xff0c;如下图所示&#xff1a; 容器&#xff08;containers&#xff09;&#xff1a;用于存放数据&#xff1b; 算法&#xff08;algorithms&#xff09;&#xff1a;包含各种常用算法&#xff1b; 迭代器&…

Dubbo-RPC核心接口介绍

前言 Dubbo源码阅读分享系列文章&#xff0c;欢迎大家关注点赞 SPI实现部分 Dubbo-SPI机制 Dubbo-Adaptive实现原理 Dubbo-Activate实现原理 Dubbo SPI-Wrapper 注册中心 Dubbo-聊聊注册中心的设计 Dubbo-时间轮设计 通信 Dubbo-聊聊通信模块设计 RPC 聊聊Dubbo协议 …

go语言日志实现详解(打印日志、日志写入文件和日志切割)

log包定义了Logger类型&#xff0c;该类型提供了一些格式化输出的方法。本包也提供了一个预定义的“标准”logger&#xff0c;可以通过调用函数Print系列(Print|Printf|Println&#xff09;、Fatal系列&#xff08;Fatal|Fatalf|Fatalln&#xff09;、和Panic系列&#xff08;P…