JVM运行状态评估及优化

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 估算系统QPS,每个请求会创建多少对象,占多少内存,机器配置选型,年轻代应该给多少内存,YGC触发频率,对象进入老年代的速率,老年代应该给多少内存,Full GC触发的频率。这些都是根据代码可大概合理预估的。

预估性优化

估算系统QPS,每个请求会创建多少对象,占多少内存,机器配置选型,年轻代应该给多少内存,YGC触发频率,对象进入老年代的速率,老年代应该给多少内存,Full GC触发的频率。这些都是根据代码可大概合理预估的。


预估完成后,就能采用优化思路,先给自己的系统设置一些初始JVM参数。如堆内存大小,年轻代大小,Eden和Survivor的比例,老年代的大小,大对象的阈值,大龄对象进入老年代的阈值等。


优化思路很简单,尽量让:


$每次 YGC 后的存活对象 < Survivor区/2 $


保证都留存在年轻代里。尽量不让对象进入老年代,以减少Full GC频率,避免频繁Full GC影响JVM性能。


系统压测时的JVM优化

一个新系统开发完后,会经过本地的单元测试,到系统集成测试,再到测试环境的功能测试,预发布环境的压力测试,要保证系统的功能全部正常。在一定压力下性能、稳定性和并发能力都正常,最后才会部署到生产环境运行。


关键环节就是预发布环境的压力测试,会使用一些压力测试工具模拟比如1000个用户同时访问系统,造成每秒500个请求的压力,然后看系统能否支撑住每秒500请求的压力。同时看系统各个接口的响应延时是否在比如200ms内或在数据库中模拟出来百万级单表数据,然后看系统是否还能稳定运行。


具体如何进行系统压测,不是我们这里要讲述的内容,大家自行百度一下“Java压力测试”,就会看到很多开源的工具,可以轻松模拟出N个用户同时访问你系统的场景,还能给你一份压力测试报告,告诉你系统可以支撑每秒多少请求,包括系统接口的响应延时。通常压测工具会对系统发起持续不断的请求,持续很长时间,比如几个小时,甚至几天时间。


所以此时完全就可以在这个环节,对测试机器运行系统,采用jstat分析模拟真实环境的压力下,JVM运行状态。


然后根据压测环境JVM运行状况,如发现对象过快进入老年代,就需要采用之前介绍的优化思路,合理调整新生代、老年代、Eden、Survivor各个区域的内存大小,保证对象尽量留在年轻代,不要过快进入老年代。


当对压测环境下的系统优化好JVM参数之后,观察Young GC和Full GC频率都很低,此时就可部署上线。


监控线上JVM

每天高峰、低峰期用jstat、jmap、jhat等工具观察线上系统的JVM运行是否正常,有无频繁Full GC的问题。有就优化,没有就平时每天都定时或每周都看看。


部署专门监控系统

如Zabbix、OpenFalcon、Ganglia,然后你部署的系统都可以把JVM统计项发送到这些监控系统里去。


此时你就可以在这些监控系统可视化的界面里,看到你需要的所有指标,包括你的各个内存区域的对象占用变化曲线,直接可以看到Eden区的对象增速,还会告诉你Young GC发生的频率以及耗时,包括老年代的对象增速以及Full GC的频率和耗时。


而且这些工具还允许你设置监控。即指定一个监控规则,比如线上系统的JVM,如果10分钟之内发生5 次以上Full GC,就需要发送报警给你。比如发送到你的邮箱、短信。


其实把这些命令行用好了,基本线上系统的JVM监控和优化都能搞定了。


线上运行系统,要不然用命令行工具手动监控,发现问题就优化,要不然就是依托公司监控系统,可视化查看日常系统的运行状态。

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
1月前
|
监控 算法 Java
Java虚拟机(JVM)垃圾回收机制深度剖析与优化策略####
本文作为一篇技术性文章,深入探讨了Java虚拟机(JVM)中垃圾回收的工作原理,详细分析了标记-清除、复制算法、标记-压缩及分代收集等主流垃圾回收算法的特点和适用场景。通过实际案例,展示了不同GC(Garbage Collector)算法在应用中的表现差异,并针对大型应用提出了一系列优化策略,包括选择合适的GC算法、调整堆内存大小、并行与并发GC调优等,旨在帮助开发者更好地理解和优化Java应用的性能。 ####
57 0
|
1月前
|
存储 监控 算法
Java虚拟机(JVM)垃圾回收机制深度解析与优化策略####
本文旨在深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法及参数调优方法。通过剖析垃圾回收的生命周期、内存区域划分以及GC日志分析,为开发者提供一套实用的JVM垃圾回收优化指南,助力提升Java应用的性能与稳定性。 ####
|
2月前
|
监控 算法 Java
Java虚拟机垃圾回收机制深度剖析与优化策略####
【10月更文挑战第21天】 本文旨在深入探讨Java虚拟机(JVM)中的垃圾回收机制,揭示其工作原理、常见算法及参数调优技巧。通过案例分析,展示如何根据应用特性调整GC策略,以提升Java应用的性能和稳定性,为开发者提供实战中的优化指南。 ####
50 5
|
2月前
|
监控 Java 开发者
Java虚拟机(JVM)深度优化指南####
本文深入探讨了Java虚拟机(JVM)的工作原理及其性能优化策略,旨在帮助开发者通过理解JVM的内部机制来提升Java应用的运行效率。不同于传统的技术教程,本文采用案例分析与实战技巧相结合的方式,为读者揭示JVM调优的艺术。 ####
74 8
|
2月前
|
存储 IDE Java
实战优化公司线上系统JVM:从基础到高级
【11月更文挑战第28天】Java虚拟机(JVM)是Java语言的核心组件,它使得Java程序能够实现“一次编写,到处运行”的跨平台特性。在现代应用程序中,JVM的性能和稳定性直接影响到系统的整体表现。本文将深入探讨JVM的基础知识、基本特点、定义、发展历史、主要概念、调试工具、内存管理、垃圾回收、性能调优等方面,并提供一个实际的问题demo,使用IntelliJ IDEA工具进行调试演示。
54 0
|
3月前
|
Arthas 监控 Java
JVM知识体系学习七:了解JVM常用命令行参数、GC日志详解、调优三大方面(JVM规划和预调优、优化JVM环境、JVM运行出现的各种问题)、Arthas
这篇文章全面介绍了JVM的命令行参数、GC日志分析以及性能调优的各个方面,包括监控工具使用和实际案例分析。
130 3
|
3月前
|
存储 算法 Java
深入理解Java虚拟机(JVM)及其优化策略
【10月更文挑战第10天】深入理解Java虚拟机(JVM)及其优化策略
61 1
|
3月前
|
监控 Java
Java的JVM如何优化?
Java的JVM如何优化?
71 3
|
5月前
|
存储 安全 Java
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程,JDK、JRE、JVM关系;程序计数器,堆,虚拟机栈,堆栈的区别是什么,方法区,直接内存
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别;什么是程序计数器,堆,虚拟机栈,栈内存溢出,堆栈的区别是什么,方法区,直接内存
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程,JDK、JRE、JVM关系;程序计数器,堆,虚拟机栈,堆栈的区别是什么,方法区,直接内存
|
6月前
|
Java 编译器 程序员
JVM常见面试题(一):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别
JVM常见面试题(一):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别
JVM常见面试题(一):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别