当前位置: 首页 > news >正文

学习剑指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

http://www.lryc.cn/news/218086.html

相关文章:

  • java网络通信
  • Three.js之加载外部三维模型
  • 【机器学习】正规方程与梯度下降API及案例预测
  • 【SOC基础】单片机学习案例汇总 Part2:蜂鸣器、数码管显示
  • 顶层模块【FPGA】
  • IT行业就业分析
  • 读取用户剪贴板内容
  • “深入理解Nginx的负载均衡与动静分离“
  • JVM 内存和 GC 算法
  • memtest86 prosite v10.6
  • Springboot JSP项目如何以war、jar方式运行
  • 系统架构设计师(第二版)学习笔记----层次式架构设计理论与实践
  • Python之字符串详解
  • 《视觉SLAM十四讲》-- 概述与预备知识
  • Java8 Stream API全面解析——高效流式编程的秘诀
  • 分享一下微信小程序里怎么开店
  • uniapp小程序刮刮乐抽奖
  • Qt 窗口无法移出屏幕
  • java毕业设计基于springboot+vue线上教学辅助系统
  • 开源 Wiki 软件 wiki.js
  • STM32基本定时器中断
  • 学习历程_基础_精通部分_达到手搓的程度
  • Redis中的List类型
  • 3D模型格式转换工具HOOPS Exchange:如何将3D PDF转换为STEP格式?
  • DB-GPT介绍
  • Java,面向对象,内部类
  • 唯一ID如何生成,介绍一下目前技术领域最常使用的几种方法
  • 【翻译】XL-Sum: Large-Scale Multilingual Abstractive Summarization for 44 Languages
  • 配置OpenCV
  • 1-时间复杂度和空间复杂度