JVM-调优思路,实战经验

简介: JVM-调优思路,实战经验

基础概念

  1. 吞吐量:用户代码执行时间/(用户代码执行时间+垃圾回收时间)
  2. 响应时间:STW(stop the word)越短,响应时间越好
    首先要确定追求什么?吞吐量优先还是响应时间优先?还是 在满足一定的响应时间的情况下,要求达到多大的吞吐量.
  • 吞吐量优先的一般选择(PS+PO)垃圾回收器
  • 响应时间优先一般选用G1垃圾回收器

    什么是调优

  1. 根据需求进行JVM规划和预调优
  2. 优化JVM运行坏境
  3. 解决JVM运行过程中出现的各种OOM

    从规划开始

  • 熟悉业务场景,选择垃圾回收器
  • 计算内存需求
  • 选定CPU
  • 设置年代大小
  • 设定日志参数
    GC日志参数
  • 观察日志情况

    案例分析

  1. 原服务器1.5G堆,网站比较缓慢.服务器升级后16G堆,反而效率更低.
    问题分析1:为什么网站会慢
    ​ 用户量大,内存不足,频繁GC,STW长
    问题分析2:为什么更慢
    ​ 内存越大,FGC时间约长,STW越长
    调优方案:ps换成CMS或者G1
  2. 系统CPU经常100%,如何调优
    问题分析:一定有线程(工作线程|垃圾回收线程)占用系统资源
    • 找出那个进程cpu高
    • 该进程中的哪个线程CPU高(top -Hp)
    • 导出线程的堆栈(jstack)
    • 查找哪个方法的消耗时间(jstack)
  3. 系统内存飙升,如何查找问题
    • 导出堆内存(jmap)
    • 分析(mat、jvisualvm)

      解决JVM运行环境问题

  4. top观察CPU、内存高居不下的进程
  5. top -Hp 查看进程中的线程
  6. jstack 定位线程状况,重点关注:WAITING、BLOCKED
  7. jmap -histo | head -20 查找有多少对象产生
  8. jmap -dump:format=b,file=xxx.hprof
相关文章
|
1月前
|
存储 监控 算法
jvm-性能调优(二)
jvm-性能调优(二)
|
3天前
|
监控 架构师 Java
JVM进阶调优系列(6)一文详解JVM参数与大厂实战调优模板推荐
本文详述了JVM参数的分类及使用方法,包括标准参数、非标准参数和不稳定参数的定义及其应用场景。特别介绍了JVM调优中的关键参数,如堆内存、垃圾回收器和GC日志等配置,并提供了大厂生产环境中常用的调优模板,帮助开发者优化Java应用程序的性能。
|
7天前
|
存储 监控 算法
JVM调优深度剖析:内存模型、垃圾收集、工具与实战
【10月更文挑战第9天】在Java开发领域,Java虚拟机(JVM)的性能调优是构建高性能、高并发系统不可或缺的一部分。作为一名资深架构师,深入理解JVM的内存模型、垃圾收集机制、调优工具及其实现原理,对于提升系统的整体性能和稳定性至关重要。本文将深入探讨这些内容,并提供针对单机几十万并发系统的JVM调优策略和Java代码示例。
33 2
|
8天前
|
Arthas 监控 Java
JVM知识体系学习七:了解JVM常用命令行参数、GC日志详解、调优三大方面(JVM规划和预调优、优化JVM环境、JVM运行出现的各种问题)、Arthas
这篇文章全面介绍了JVM的命令行参数、GC日志分析以及性能调优的各个方面,包括监控工具使用和实际案例分析。
25 3
|
11天前
|
Java API 对象存储
JVM进阶调优系列(2)字节面试:JVM内存区域怎么划分,分别有什么用?
本文详细解析了JVM类加载过程的关键步骤,包括加载验证、准备、解析和初始化等阶段,并介绍了元数据区、程序计数器、虚拟机栈、堆内存及本地方法栈的作用。通过本文,读者可以深入了解JVM的工作原理,理解类加载器的类型及其机制,并掌握类加载过程中各阶段的具体操作。
|
9天前
|
算法 Java
JVM进阶调优系列(4)年轻代和老年代采用什么GC算法回收?
本文详细介绍了JVM中的GC算法,包括年轻代的复制算法和老年代的标记-整理算法。复制算法适用于年轻代,因其高效且能避免内存碎片;标记-整理算法则用于老年代,虽然效率较低,但能有效解决内存碎片问题。文章还解释了这两种算法的具体过程及其优缺点,并简要提及了其他GC算法。
 JVM进阶调优系列(4)年轻代和老年代采用什么GC算法回收?
|
5天前
|
Java
JVM进阶调优系列(5)CMS回收器通俗演义一文讲透FullGC
本文介绍了JVM中CMS垃圾回收器对Full GC的优化,包括Stop the world的影响、Full GC触发条件、GC过程的四个阶段(初始标记、并发标记、重新标记、并发清理)及并发清理期间的Concurrent mode failure处理,并简述了GC roots的概念及其在GC中的作用。
|
10天前
|
算法 Java
JVM进阶调优系列(3)堆内存的对象什么时候被回收?
堆对象的生命周期是咋样的?什么时候被回收,回收前又如何流转?具体又是被如何回收?今天重点讲对象GC,看完这篇就全都明白了。
|
1月前
|
Kubernetes Java 编译器
解锁极致性能:Quarkus如何让JVM应用调优变得前所未有的简单与高效!
Quarkus是一款专为GraalVM和OpenJDK设计的Kubernetes Native Java框架,采用AOT编译技术将Java应用转化为本地代码,大幅提升启动速度与运行效率。它简化了性能调优流程,如自动优化垃圾回收、类加载、内存管理及线程管理等,使开发者无需深入理解JVM细节即可轻松提升应用性能。与传统JVM应用相比,Quarkus显著降低了性能调优的复杂度。
79 2
|
17天前
|
前端开发 Java 应用服务中间件
JVM进阶调优系列(1)类加载器原理一文讲透
本文详细介绍了JVM类加载机制。首先解释了类加载器的概念及其工作原理,接着阐述了四种类型的类加载器:启动类加载器、扩展类加载器、应用类加载器及用户自定义类加载器。文中重点讲解了双亲委派机制,包括其优点和缺点,并探讨了打破这一机制的方法。最后,通过Tomcat的实际应用示例,展示了如何通过自定义类加载器打破双亲委派机制,实现应用间的隔离。