【JVM】OOM与调优(一)

news2024/11/17 15:53:36

OOM与调优

方法区

在这里插入图片描述

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

public class MetaspaceOverFlowTest {

    /**
     * 模拟CGLIB向元空间写入数据
     */
    public static void main(String[] args) {
        while (true) {
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }

            Enhancer enhancer = new Enhancer();

            enhancer.setSuperclass(MetaspaceOverFlowTest.class);
            enhancer.setUseCache(false);
            enhancer.setCallback(new MethodInterceptor() {
                @Override
                public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
                    return methodProxy.invokeSuper(o, args);
                }
            });

            System.out.println("running ....");

            enhancer.create();
        }
    }
}

模拟OOM

查看方法区使用情况

在配置Java环境的情况下,直接打开命令行输入jvisualvm命令即可打开

C:\Users\87766>jvisualvm

然后在左边找到我们的程序,右边是查看图形
在这里插入图片描述
查看GC情况需要安装一个插件Visual GC,左上方工具栏安装即可
在这里插入图片描述

GC日志

[GC (Metadata GC Threshold) [PSYoungGen: 9003K->672K(64512K)] 16030K->9067K(236544K), 0.0038284 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[Full GC (Metadata GC Threshold) [PSYoungGen: 672K->0K(64512K)] [ParOldGen: 8395K->8858K(74752K)] 9067K->8858K(139264K), [Metaspace: 20138K->20138K(32768K)], 0.0648738 secs] [Times: user=0.02 sys=0.00, real=0.07 secs]
```![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/4bd6eccf56664bd8b1d467cb6f906d1d.png)

### 调优参数
```bash
-XX:MetaspaceSize=20M -XX:MaxMetaspaceSize=20M -XX:+PrintGCDetails

原则:最大、最小设置成一样大,避免因内存分配不足而引发扩容
程序运行起来后,通过VisualVM、Arthas查看占用了多少内存,向上调优,预留20%以上的空间

堆区

在这里插入图片描述

public class HeapOverFlowTest1 {

    int[] intArr = new int[10];

    public static void main(String[] args) {
        List<HeapOverFlowTest1> list = new ArrayList<HeapOverFlowTest1>();

        for (;;) {
            try {
                Thread.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            list.add(new HeapOverFlowTest1());
        }

    }
}

模拟OOM

调优vm参数

-Xms10m -Xmx10m -XX:+PrintGCDetails

jvisualvm查看gc情况

在这里插入图片描述

gc日志

[GC (Allocation Failure) [PSYoungGen: 1120K->469K(2048K)] 7372K->6786K(9216K), 0.0021594 secs] [Times: user=0.00 sys=0.02, real=0.01 secs]
[GC类型(GC原因)[新生代收集器:gc前新生代的内存使用情况->gc后新生代的内存使用情况(新生代总内存)]gc前堆内存的使用情况->gc后堆内存的使用情况(堆总内存), gc耗时][TImes:gc阶段用户空间耗时 gc阶段内核空间耗时,gc阶段实际耗时]

[Full GC (Ergonomics) [PSYoungGen: 469K->0K(2048K)] [ParOldGen: 6316K->5603K(7168K)] 6786K->5603K(9216K), [Metaspace: 9480K->9410K(1058816K)], 0.0488684 secs] [Times: user=0.08 sys=0.02, real=0.05 secs]
[GC类型(GC原因)[新生代垃圾收集器:gc前新生代的内存使用情况->gc后新生代的内存使用情况(新生代总内存)][老年代垃圾收集器:gc前老年代的内存使用情况->gc后老年代的内存使用情况(老年代总内存)]gc前堆内存的使用情况-> gc后堆内存的使用情况(堆总内存)[Metaspace:gc前元空间的内存使用情况-> gc后元空间的内存使用情况(元空间总内存)], gc耗时][Times:gc阶段用户空间耗时 gc阶段内核空间耗时,gc阶段实际耗时]

调优原则:

  • 1.预留30%以上的空间
  • 2.周期性看日志,重点关注Full GC频率

3.虚拟机栈

在这里插入图片描述

public class StackOverFlowTest {

    private int val = 0;

    public void test() {
        val++;

        test();
    }

    public static void main(String[] args) {
        StackOverFlowTest test = new StackOverFlowTest();

        try {
            test.test();
        } catch (Throwable e) {
            e.printStackTrace();

            System.out.println(test.val);
        }
    }
}

模拟OOM

调优参数

-Xss200k 默认1M

4.直接内存

JVM进程的堆与运行时数据区平行

  • 1.Unsafe.allocateMemory
  • 2.ByteBuf.allocateDirect(NIO)

怎么调优?不调优会怎样?(默认是不受限制)

模拟OOM

在这里插入图片描述

模拟OOM,可以看到触发了操作系统的SIGKILL信号机制(signal 9:SIGKILL),但是这个日志怎么查看呢

如何查看Linux内核日志呢?

dmesg -T

在这里插入图片描述

5.调优参数类型

  • 1.KV类型:-XX:MetaspaceSize=10M
  • 2.boolean类型:-XX:+UseCompressedOops
  • 3.简写类型:-Xms10m

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

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

相关文章

【nextjs strapi】如何统一封装 fetch 请求

前端 nextjs 接入 strapi 作为后端 如何封装请求呢 我们使用的是浏览器的 fetch 不用安装任何库 封装 frontend/src/app/[lang]/utils/fetch-api.tsx import qs from "qs"; import { getStrapiURL } from "./api-helpers";export async function fet…

混杂设备驱动、Linux内核中的中断、火焰传感器驱动、呼吸传感器驱动、等待队列

混杂设备驱动 混杂设备也叫杂项设备&#xff0c;是对普通的字符设备(struct cdev)的一种封装。misc 设备会自动创建cdev&#xff0c;不需要像我 们以前那样手动创建&#xff0c;因此采用misc 设备驱动可以简化字符设备驱动的编写。具有以下特点&#xff1a; 1) 主设备号为10&…

备战秋招60天算法挑战,Day25

题目链接&#xff1a; https://leetcode.cn/problems/combination-sum/ 视频题解&#xff1a; https://www.bilibili.com/video/BV1xyiueHEb4/ LeetCode 39. 组合总和 题目描述 给你一个无重复元素的整数数组candidates和一个目标整数target&#xff0c;找出candidates中可以…

[ACP云计算]易错题(原题)

一、ECS 1、 2、 3、 4、 5、 6、 7、 8、 9、 10、 11、 12、 13、 二、对象存储OSS 1、 2、 3、 4、 5、 6、 重点&#xff01;&#xff01;&#xff01; 7、 8、 9、 10、 11、 12、 13、 14、 15、 16、 17、 18、 19、 20、 21、 22、 内容分发网络CDN 1、 2、 3、 4…

宝塔面板配置FTP服务并安装内网穿透实现无公网IP远程连接

文章目录 前言1. Linux安装Cpolar2. 创建FTP公网地址3. 宝塔FTP服务设置4. FTP服务远程连接小结 5. 固定FTP公网地址6. 固定FTP地址连接 前言 本文主要介绍宝塔FTP文件传输服务如何搭配内网穿透工具&#xff0c;实现随时随地远程连接局域网环境搭建的宝塔FTP文件服务并进行文件…

从虚拟化到容器化再到池化,AI算力的灵活调度技术研究

AI算力&#xff0c;触手可及 ©作者|坚果 来源|神州问学 引言 - AI时代下的算力变革 近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术的快速发展极大地推动了各个领域的创新与进步。伴随着AI模型复杂度的不断提高以及数据量的爆炸式增长&#xff0c;对于高性…

厨帽检测算法样本算法模型和厨帽检测算法实际应用

厨帽检测算法是一种利用计算机视觉和深度学习技术来监控厨房工作人员是否佩戴规定的厨帽&#xff0c;以确保食品安全和卫生标准的遵守。以下是关于厨帽检测算法源码及其实际应用的详细阐述&#xff1a; 1. 算法实现 - 基于深度学习的对象识别&#xff1a;厨帽检测算法通常采用…

2024年【安全生产监管人员】考试试卷及安全生产监管人员复审考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全生产监管人员考试试卷根据新安全生产监管人员考试大纲要求&#xff0c;安全生产模拟考试一点通将安全生产监管人员模拟考试试题进行汇编&#xff0c;组成一套安全生产监管人员全真模拟考试试题&#xff0c;学员可…

全球高增速电商市场有哪些?这些市场上主流电商平台又有哪些呢?

跨境电商风起云涌&#xff0c;当欧美市场步入存量竞争&#xff0c;单量的大幅下滑成为广大卖家的普遍痛点。然鹅&#xff0c;有一些市场却频频传来爆单喜讯&#xff0c;我们一起来了解一下—— 全球高增速电商市场有哪些&#xff1f; 首先&#xff0c;在全球电商增速最快的国家…

【UE5】UMG C++父类绑定蓝图子类属性

有时我们在设计UMG时可能会使用到C父类来处理一些通用逻辑&#xff0c;如果我们想要在C父类中获取其派生子类的某个属性&#xff0c;如Image或Button等&#xff0c;我们可以通过使用UE提供的BindWidget元数据标签的方式来获取。 BindWidget BindWidget元数据标签在官方文档中…

【C++指南】类和对象(一):类和对象的定义和使用 基础讲解

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C指南》 期待您的关注 目录 引言 文章思路 一、类的定义 1.类的定义 2.类的访问限定符 3.class与struct的使用区别 4.类域…

topo组态引入-记录

一、目录&#xff08;vue-router映射到下面的index.vue界面&#xff09; &#xff08;自己记录&#xff0c;别下载不用看&#xff09;

Prometheus:alertmanager实战分组、抑制、静默

1 项目目标 &#xff08;1&#xff09;熟练部署alertmanager &#xff08;2&#xff09;熟练整合alertmanagerPrometheus &#xff08;3&#xff09;熟练alertmanager分组、抑制、静默 2 项目准备 2.1 规划节点 主机名 主机IP 节点规划 prome-master01 10.0.1.10 服务…

Graylog日志丢失解决方案

问题描述 目前公司使用的日志方案是Graylog5.0版本&#xff0c;当接入的日志并发多时&#xff0c;就会出现日志丢失的情况。 目前硬件系统centos7.9 内核5.16.13。一台graylog和一台es服务器。 两台机器硬件配置 graylog CPU 36C 内存 150G 系统硬盘 500G &#xff08;固态&…

盘点15款主流的项目管理软件,优缺点一目了然!

本文将盘点对15款主流的项目管理软件进行盘点&#xff1a; 简道云、Worktile、Teambition、Tower、泛微 e-office、用友项目管理软件、金蝶云星瀚项目管理、腾讯 TAPD、Asana、Trello、Jira、Basecamp、Monday.com、Wrike、Smartsheet。 在现代企业的运营中&#xff0c;项目管理…

uniapp,uview:inputnumber或者input,当type为number的时候,在ios里输入不了小数的问题

项目场景&#xff1a; 在做uniapp的H5页面时&#xff0c;有个需求是要输入框要能支持可以保留两位小数输入&#xff0c;不能输入负数和其他字符。心想这简单&#xff0c;直接用uview的inputnumber组件这不就好了&#xff0c;结果测试提bug说不能输入小数点&#xff0c;我心想我…

基于Hadoop+Zookeeper+Hive+HBase+Echarts的地区旅游大数据可视化管理系统设计与实现

绪论 研究背景 当今时代信息资源日益丰富大量&#xff0c;信息资源的利用对社会的发展起着主要作用&#xff0c;运用信息技术协助产业设计越来越成为行业发展的重要趋势。 旅游产业是典型的体验服务产业&#xff0c;在任何发展阶段&#xff0c;信息反馈的准确性与及时性都具…

【表格】EEG作为脑成像工具的分析与应用

EEG作为脑成像工具的分析与应用 【表格】EEG空间分析方法与应用 方法/应用描述关键点示例/公式备注全局场功率(GFP)量化头皮电位场的强度 G F P σ ( V t ) GFP \sigma(V_t) GFPσ(Vt​) 其中 V t V_t Vt​为t时刻各电极电压无具体公式&#xff0c;为标准差计算提供对同步活…

C和C++中数组的不同

本文选自公众号文章&#xff1a; https://mp.weixin.qq.com/s/xyUMWTyEu7-Uws8Zfxifpghttps://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxcheckurl?requrlhttps%3A%2F%2Fmp.weixin.qq.com%2Fs%2FxyUMWTyEu7-Uws8Zfxifpg&skey%40crypt_963c540a_c8e6882f00ef27f0c27a8357dea50…

了解Redis数据持久化(下)

4.AOF 写后日志&#xff0c;避免宕机数据丢失 4.1 AOF说明 AOF日志存储的是Redis服务器的顺序指令序列只记录对内存进行修改的指令append-only file&#xff08;AOF&#xff09;AOF主要是主线程在执行&#xff0c;将日志写入磁盘的过程中&#xff0c;如果磁盘压力太大&#x…