JVM内存用量的再学习


背景

最近解决一个SQLServer的问题耗时很久.
最终找到了一个看似合理的问题解释.
但是感觉不能只是总结于数据库方面
因为为了解决这个问题增加了很多监控措施.
所以想就这这个问题, 总结一下这次问题诊断过程中学习到的JVM相关知识.

一个JVM的监控图表

堆区信息

类加载

栈信息


内存学习

启动脚本为:

-javaagent:./jmx_prometheus_javaagent-0.17.2.jar=8080:simple-config.yml -XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1 -XX:+SafepointTimeout   -XX:SafepointTimeoutDelay=2000  -XX:+UseCountedLoopSafepoints  -XX:-UseBiasedLocking -XX:+UnlockDiagnosticVMOptions -XX:GuaranteedSafepointInterval=0 -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDetails -XX:-DisableExplicitGC -XX:+PrintGC -XX:+PrintGCDateStamps  -XX:-UseGCOverheadLimit -XX:+PrintGCTimeStamps -Xloggc:./dump/gclog -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./dump -XX:NativeMemoryTracking=detail  -XX:+UnlockDiagnosticVMOptions  -Xmx24g -Xms24g

关于监控的学习和了解

第一部分: 关于堆区
堆区设置的是24G内存 可以看到因为没有设置 老年代和青年带的比率, 就是按照默认的 2:1 进行分配
老年代 16G内存 青年代8G内存.
幸存者区域 也是按照青年代的 8:1:1 进行默认分配,也就是只有青年代的 10%的代傲, 最大值是 805MB. 内存的使用之, 基本上也达到了 16+8 =24G的堆区最大值. 第二部分: 关于非堆区
1. 元数据区占用了 1.87GB, 接近 2GB的内存用量.
2. 压缩元类区域: 200MB左右.
3. Code cache 占用了 基本上默认的最大 240MB 监控到的费堆区合计使用了 2.5GB左右. 通过acuator 或者是 jvm exporter 监控信息获得:
两者合计为: 26.5GB 另外线程数数量较多, 最大值有 800个线程数 理论上Linux下面每一个线程至少要1MB的内存
所以这一块栈区的内存用量也不小, 也有接近1GB的区域. 第三部分:
同时进入系统查看 top 或者是 ps命令查看内存信息
1. top 后输入 大写的M 查看内存使用量较高的进程.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
32087 root 20 0 34.1g 29.6g 146164 S 27.6 62.7 1507:15 java RES的内存足有 29.6G 比刚才计算的 26.5G 要多3GB的空间. 2. 使用 ps -aux |grep java 进行查看
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 32087 243 62.7 35740952 31017360 ? Sl 12月04 1507:17 内存用量其实也是 30G左右.

简单总结

设置堆区为 24G, 实际上堆区占整个进程的内存用量为:
24/30 = 80% 换句话说, 如果是容器内. 我们这样一个重型应用. 设置内存到32G的pod 的limit值
不建议 堆区的占用量超过80% 设置不建议超过 75% 因为我ps 和 top 查看时堆区的内存应该已经下降了, 其他区域内存的占比要比
(30-24) 的6GB的使用量还要搞.
这6GB 不仅仅包含监控中看到的 非堆区还有栈区 以及 GC使用的内存还有一部分直接内存
但是这一块应该是不包含加载到系统里面的缓存数据. 另外监控中还可以看到. 类的数量其实非常多.
程序启动完时就已经有了 16万个类, 运行完所有的功能后 类已经有 27.5万个类 计划下次有时间总结一一下 类和对象的关系.

JVM内存用量的再学习的更多相关文章

  1. 2万字长文包教包会 JVM 内存结构 保姆级学习笔记

    写这篇的主要原因呢,就是为了能在简历上写个"熟悉JVM底层结构",另一个原因就是能让读我文章的大家也写上这句话,真是个助人为乐的帅小伙....嗯,不单单只是面向面试学习哈,更重要的 ...

  2. java的线程安全、单例模式、JVM内存结构等知识学习和整理

    知其然,不知其所以然 !在技术的海洋里,前路漫漫,我一直在迷失着自我. 欢迎访问我的csdn博客,我们一同成长! "不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!" 博 ...

  3. JVM内存管理学习总结(一)

    I.JVM进程的生命周期 JVM实例的生命周期和java程序的生命周期保持一致,即一个新的程序启动则产生一个新的JVM进程实例,程序结束则JVM进程实例伴随着消失.那么程序启动和程序终止就是JVM实例 ...

  4. jvm内存JVM学习笔记-引用(Reference)机制

    在写这篇文章之前,xxx已经写过了几篇关于改jvm内存主题的文章,想要了解的朋友可以去翻一下之前的文章 如果你还不了解JVM的基本概念和内存划分,请阅读JVM学习笔记-基础知识和JVM学习笔记-内存处 ...

  5. java虚拟机学习-JVM内存管理:深入垃圾收集器与内存分配策略(4)

    Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 概述: 说起垃圾收集(Garbage Collection,下文简称GC),大部分人都把这项 ...

  6. java虚拟机学习-JVM内存管理:深入Java内存区域与OOM(3)

    概述 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 对于从事C.C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的皇帝又 ...

  7. 这一次,终于系统的学习了 JVM 内存结构

    最近在看< JAVA并发编程实践 >这本书,里面涉及到了 Java 内存模型,通过 Java 内存模型顺理成章的来到的 JVM 内存结构,关于 JVM 内存结构的认知还停留在上大学那会的课 ...

  8. 学习记录--JVM内存分析

    今天刷牛客网的题时,看到了两位大神关于JVM内存分析的讲解,就顺手记录学习一下. JVM内存模型图 方法区域存放了所加载的类的信息(名称.修饰符等).类中的静态变量.类中定义为final类型的常量.类 ...

  9. JVM基础学习(一):JVM内存模型

    在Java进阶知识的学习中,JVM都是避不过去的一关,我个人对于JVM的理解其实就是相当于在操作系统的外层再加了一层中间层,从来屏蔽了具体硬件之间的不同实现,使得Java实现了最重要的特性:一次编译, ...

  10. Jvm 内存浅析 及 GC个人学习总结

    从诞生至今,20多年过去,Java至今仍是使用最为广泛的语言.这仰赖于Java提供的各种技术和特性,让开发人员能优雅的编写高效的程序.今天我们就来说说Java的一项基本但非常重要的技术内存管理 了解C ...

随机推荐

  1. Python——第一章:语言介绍

    随着Python的语言在世界受欢迎程度持续高涨,如今也成功夺得了第一的宝座. 在计算机领域,没有谁(诺基亚.微软.苹果.亚马逊等等)能永远稳坐第一,随着时间更迭,就会推陈出新,一定会有更好的.更先进的 ...

  2. CentOS 7上使用Python 3和虚拟环境

    在CentOS 7上使用Python 3和虚拟环境,请按照以下步骤操作: 首先,确保您的系统已安装Python 3.您可以使用以下命令检查Python 3是否已安装: python3 --versio ...

  3. Spring Boot与Shiro和Mybatis整合

    1:shiro是什么? Apache Shiro 是ASF旗下的一款开源软件 shrio是一款强大而灵活的安全框架 可为任何应用提供安全保障- 从命令行应用.移动应用到大型网络及企业应用 2:shir ...

  4. 基于 Docker 打造前端持续集成开发环境

    基于 Docker 打造前端持续集成开发环境 写在前面: 这不是一篇有新意的文章,因为这篇文章半年前我就发布在其他平台上过,为什么在知乎上旧文新发? 除了想要把发布在其他地方的文章统一放到知乎上之外, ...

  5. spring-mvc 系列:拦截器和异常处理器(HandlerInterceptor、HandlerExceptionResolver)

    目录 一.拦截器的配置 二.拦截器的三个抽象方法 三.多个拦截器的执行顺序 四.基于配置的异常处理器 五.基于注解的异常处理器 一.拦截器的配置 SpringMVC中的拦截器用于拦截控制器方法的执行 ...

  6. 六一新玩法!AI涂鸦秒变精美艺术画

    摘要:上华为云ModelArts体验AI涂鸦新玩法,赢漫威复仇者联盟乐高!祝大小朋友们六一儿童节快乐~ 本文分享自华为云社区<[云享热点]六一新玩法!AI 涂鸦秒变精美艺术画>,作者:华为 ...

  7. 总是记不住java的IO流用法?用N个问题教你掌握java IO流

    摘要:Java IO 体系看起来类很多,感觉很复杂,但其实是 IO 涉及的因素太多了.在设计 IO 相关的类时,编写者也不是从同一个方面考虑的,所以会给人一种很乱的感觉,并且还有设计模式的使用,更加难 ...

  8. 登录appuploader

    ​ 转载:登录appuploader 常规使用登录方法 双击appuploader.exe 启动appuploader 点击底部的未登录,弹出登录框 在登录框内输入apple开发者账号 如果没有app ...

  9. 如何利用 A/B 实验提升产品用户留存? 看字节实战案例给你答案!

    技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 产品增长中最为经典的模型为 AARRR 漏斗模型,该模型追求最大化拉新,第一步"获客"(Acqui ...

  10. PPT 稳妥选用字体

    字体怎么选 商务报告PPT字体怎么选 广告宣传PPT字体怎么选 发布会PPT字体怎么选 教学课件PPT字体怎么选--小学以下 教学课件PPT字体怎么选--中学以上 印刷阅读PPT字体怎么选--数据公司 ...