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

JVM实战调优案例

JVM实战调优案例

  • 案例背景
  • 机器配置
  • 问题发现
  • 突破点
  • 尝试解决问题

案例背景

应用每次产生Full GC,持续的时间非常长,大概需要20多秒才能完成。那么会产生一个报警,但是一开始只是偶尔一次,我们也没有注意,随着时间越来越长,每周就会产生一次Full GC,时间都是20多秒。这种情况下,我们不得不去解决一下。

机器配置

机器是一个4C 8G的配置,但是老年代分配的内存分配了6G,其他都是中规中矩的操作。通过开启GC日志寻找问题,结合机器的各种指标(CPU、内存、磁盘、线程等等),这些是由监控工具来产生。没有的可以通过普罗米修斯等等一些东西来看。

问题发现

每次只要产生FullGC的时候,CPU有上升,内存有上升,但是内存的SWAP区内存有下降。

【补充】:
SWAP交换分区:通常被称为交换分区,这是一块特殊的硬盘空间,即当物理内存不够用的时候,操作系统会从物理内存中取出一部分暂时不用的数据,放在交换分区中,从而为当前运行的程序腾出足够的内存空间。

突破点

难道JVM会用到SWAP,SWAP会导致回收缓慢?
具体来看SWAP被程序使用的情况,随着内存的上升,JAVA使用了300多M的SWAP。OOM发生问题的时候,OCS(开放缓存服务)发现内存不足时,会把内存中暂时不用的数据交换出去,放到SWAP区中。这个过程就称为SWAP-OUT。当某个进程又需要这个数据,且又发现内存中有的时候,它就会从SWAP区将其交换回来。这个就是内存与SWAP进行交换的一个过程。

尝试解决问题

发现这个问题之后,抽查了所有发生Full GC的机器,都是SWAP区上升,内存下降。那么这时候我们先把SWAP区关掉,尝试下看看会不会产生问题。通过修改操作系统的VM参数去禁用SWAP, 然后再启动测试,发现问题得到解决。

只要我们将SWAP关闭或者释放,那么我们的FullGC立刻进行了一个完完全全的回收而且还非常快。也就是我们所有需要回收的东西都在内存中。这个时候,我们就相当于把内存中的FullGC时间20秒一下降到了100ms。SWAP区不再使用,并且内存也够用。

所以最终FullGC整体时间偏长的问题得到了解决。

【补充】:
Full GC指的是针对新生代、老年代、永久代的全体内存空间的垃圾回收,所以称之为Full GC。

参考资料:JVM实战调优案例,面试可吹!


http://www.kler.cn/a/13730.html

相关文章:

  • Simon IELTS: Speaking
  • OpenAI最新官方ChatGPT聊天插件接口《接入插件快速开始》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(二)(附源码)
  • 【智能座舱系列】-华为发布全球首款车载光场屏 开拓车载视觉体验新航道
  • 淘宝直通车如何带动搜索流量?
  • 【ECharts+Vue】学习笔记(快速入门版)
  • C++ 多态详解
  • 【夜莺监控搭建】
  • [架构之路-170]-《软考-系统分析师》-5-数据库系统-1-数据库模式、数据模型、数据库访问的标准接口
  • Elasticsearch聚合、自动补全 | 黑马旅游
  • 电磁阀“位”与“通”的详细解说(示意图)
  • RocketMQ高级概念
  • 基于文心一言的底层视觉理解,百度网盘把「猫」换成了「黄色的猫」
  • NewBing 边栏快捷插件没有了!如何解决?如何脱离浏览器使用 New Bing?
  • 【Linux进阶篇】日志系统
  • 牛客网Verilog刷题——VL3
  • 硬件语言Verilog HDL牛客刷题day10 华W部分 和 DJ部分
  • Qt网络编程 (udp广播和接收例)
  • Python函数 — 递归函数
  • jmeter的界面介绍
  • 微信小程序从零开始经验贴(含详细资料及链接)