(五)JVM实战——JVM性能调优与监控

embedded/2024/9/24 9:20:46/

JVM调优案例的场景

  • 为什么要调优:防止或者解决jvm虚拟机中的OOM问题;减少FullGC出现的频率,解决系统运行卡、慢问题
  • JVM调优案例的四个方面
  • OOM(堆溢出):java heap space
  • OOM(元空间溢出):Metaspace
  • OOM(GC overhead limit exceeded):超过98%的时间用来做GC,并且回收了不到2%的堆内存时会抛出此异常
  • OOM(线程溢出):创建了大量线程导致的异常
  • jvm调优监控的依据

- 运行日志

- 异常堆栈

- GC日志

- 线程快照

- 堆转储快照

  • 出现的问题

- GC频繁

- CPU load过高

- OOM内存溢出

- 内存泄漏

-  死锁

- 程序响应时间长 

  • 性能分析

- GC日志分析

- jstack、jmap、jinfo等系统工具排查

- dump文件,使用内存分析工具分析,如visualvm、MAT

- jstack查看堆栈信息

- arthas实时监控jvm状态 

JVM性能优化案例

  • 调整堆内存大小提高服务的吞吐量
  • JIT即时编译器优化:只要开启了逃逸分析,就会判断方法中的变量是否发生了逃逸,如果发生了逃逸,就会使用栈上分配;同步消除;标量替换
  • 合理配置堆内存大小:一般设置为FullGC之后的老年代内存占用的3-4倍,方法区设置为1.2-1.5倍,年轻代设置为1-1.5倍
  • cpu占用很高排查方案:top -Hp <进程pid>查看cpu不断飙高的异常线程pid,使用jstack查看该线程的执行情况(jstack <pid> | grep -A<N> 0x<16进制pid>)
  • G1并发GC线程数对性能的影响
  • 调整垃圾回收器提高服务的吞吐量
  • 日均百万级订单交易系统如何设置jvm参数


http://www.ppmy.cn/embedded/37478.html

相关文章

【Linux】Docker 安装部署 Nacos

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 【Linux】Docker 安装部署 Nacos docker搜索na…

计算机毕业设计Python+Vue.js天气预测系统 中国气象质量采集与可视化 天气数据分析 天气可视化 天气大数据 天气爬虫 大数据毕业设计

摘要 随着科技技术的不断发展&#xff0c;人民物质生活质量不断提高&#xff0c;我们越来越关注身边的气象、空气等地理环境。对于普通居民我们会选择合适的气象进行出游&#xff0c;提高精神层面的生活质量&#xff1b;对于企业会关注气象变换状况&#xff0c;来定制相关的生产…

Baidu Comate智能编码助手,释放“十倍”软件生产力

文章目录 一.Baidu Comate介绍1.基本介绍2.产品优势 二.Baidu Comate安装三.Baidu Comate使用1.**基本问答**2.**代码补全**3.**代码解释**4.**行间注释**5.**调优建议**6.**代码库** 四.总结 一.Baidu Comate介绍 1.基本介绍 正所谓工欲善其事&#xff0c;必先利其器&#x…

synchronized工作原理及最佳实践指南

1. synchronized的基本用法与案例分析 1.1. 同步实例方法&#xff1a;对象锁的基本概念 1.1.1. 代码示例&#xff1a;无同步情况下的问题 在没有同步机制的环境下&#xff0c;当多个线程访问同一对象的非同步方法时&#xff0c;会导致资源共享的问题&#xff0c;从而出现数据…

(1day)致远M3 log 敏感信息泄露漏洞(Session)复现

前言 系统学习web漏洞挖掘以及项目实战也有一段时间了,发现在漏洞挖掘过程中难免会碰到一些历史漏洞,来帮助自己或是提高自己挖洞和及时发现漏洞效率,于是开始创建这个专栏,对第一时间发现的1day以及历史漏洞进行复现,来让自己更加熟悉漏洞类型以及历史漏洞,方便自己在后续的项…

C++ 递归函数

一 递归函数 递归函数(Recursive Function&#xff09;即自调用函数&#xff0c;即在函数体内有直接或间接地自己调用自己的语句。 大多数递归函数都能够用非递归函数代替。 例如&#xff1a;求两个整数a,b的最大公约数。 算法描述&#xff1a; 大多数递归函数都能用非递归…

springboot 启动时校验rabbitmq是否连接成功

1.业务场景 当springboot项目启动时&#xff0c;rabbitmq中间件可能还没有启动成功&#xff0c;这时候springboot项目会直接挂掉&#xff0c;业务需要等待rabbitmq启动成功之后再进行连接redis。 2.项目结构配置 pom文件使用redisson依赖&#xff0c;配置如下&#xff1a; …

JVM学习笔记【基础篇:垃圾回收】

自动垃圾回收 C/C的内存管理 ⚫ 在C/C这类没有自动垃圾回收机制的语言中&#xff0c;一个对象如果不再使用&#xff0c;需要手动释放&#xff0c;否则就会出现 内存泄漏。我们称这种释放对象的过程为垃圾回收&#xff0c;而需要程序员编写代码进行回收的方式为手动回收。 ⚫ …