学习剑指jvm

一直弱,jvm

1、主要解决运行状态的线上系统突然卡死,造成系统无法访问,甚至直接内存溢出异常(Out of Memory,OOM)

2、希望解决线上JVM垃圾回收的相关问题,但无从下手。

3、新项目上线,对设置jvm参数设置一脸茫然,最后系统宕机。

虚拟机与JVM:

jvm是一台执行jvm字节码的虚拟计算机,它拥有独立的运行机制,其运行的jvm字节码也必由java编译而成。各种语言可以共享jvm带来的扩

JVM性能调优的目标就是减少gc的频率和Full gc的次数,使用较少的内存用来获得较高的吞吐量或较低的延迟。

内存占用:程序正常运行时需要的内存大小。

延迟:由于垃圾收集而引起的程序停顿时间。

吞吐量:用户程序运行时间占用户程序和垃圾收集占用总时间比值,

当然,调优时所考虑的方向也不同,在调优之前,必须要结合场景,有明确的优化目录,找到性能瓶颈,对瓶颈的有针对性的优化,最后测试优化后的结果,通过各种监控工具确认调优后的结果是否符合目标。

我们很多时间讲到了增加内存可以提高系统的性能而且效果显著,那么随之带来的一个问题就是,增加多少内存比较合适,那么产生full gcr 时间,gc时间会相对较长。

如果内存较小,就会频繁的gc ,这种情况下,我们该如何配置堆内存大小呢?

公式的意思是java中整个堆大小设置原则是xmx和xms设置老年代存活对象的3~4倍,即full gc 后堆内存是老年代的3-4倍。

方法区:永久代permsize和maxpermsize设置为老年代存活对象的1.2~1.5倍,新生代xmn的设置为

使用如下命令将当前的存活对象dump 到文件,此时会触发full gc

jmap -dump:live,format=b,file=heap.bin <pid>

使用如下命令打印每个class的实例数目,内存占用和类全名信息,此时会触发full gc

jmap -histo:live <pid>

在性能测试环境,可以通过java监控工具来触发full gc,比如使用visualvm 和 jconsole,这些工具在最新的bin目录下面可以找到,visualvm或者jconsole上面有一个触发gc的按钮。

最开始的可以将内存设置得大一些,如果设置为4GB,当然可以根据业务系统评估算,比如数据库获取一条数据占用128字节,每次需要获取1000条数据,那么读内内存大小就是(128/1024/1024)*1000=0.122MB

如果内存设置为1GB,新生代大小约就是333MB,那么333/12=27.75s就会把新生代内存填满。

就会把新生代内存填满,

用来查看:具体的内存使用情况

sudo -u hdfs jmap -heap 49

相关推荐
李日华大战鸡红21 分钟前
滑膜观测器(学习记录)
stm32·单片机·学习·matlab·机器人
传奇开心果编程1 小时前
【现代声明式UI学与练】第4课 列表渲染与 key——如何高效渲染列表、key 的作用、列表重排时的状态保持
学习·flutter·react native·ui·swiftui·android jetpack
传奇开心果编程1 小时前
【Compose Multiplatform 跨端开发学与练】第5课 网络与数据层
android·网络·学习·ui·ios·kotlin·composer
yt004yt2 小时前
园区 VOC 绿岛集中治理项目,管网与监测系统设计要点
大数据·学习
一条破秋裤2 小时前
06_从设备读数据_字符设备read_write流程
学习
m4Rk_3 小时前
【论文阅读】Agent 记忆机制(92):EMPO²——让 Memory 从经验复用走向主动探索
论文阅读·人工智能·学习·开源·github
欣欣之王来了4 小时前
前端开发学习路线图:2026年Vue方向最新版
前端·学习·架构·项目·vue3教程
wdfk_prog4 小时前
LWIP教程 00:从网线上的电信号到 lwIP——PHY、MAC、DMA 与 `netif` 的完整边界
运维·网络·笔记·学习·ip
EatFan4 小时前
2026 Java 后端面试风向变了:八股文只是门槛,场景化追问才是淘汰线
java·开发语言·jvm·面试·后端面试·八股文·full gc
m0_734172425 小时前
Python用zip配对前先检查长度
python·学习