开发与运维配置问题之升级机器配置后出现频繁的GC问题和超长的GC时间如何解决

简介: 开发与运维配置问题之升级机器配置后出现频繁的GC问题和超长的GC时间如何解决

问题一:报表系统为什么会频繁发生内存溢出?


报表系统为什么会频繁发生内存溢出?


参考回答:

报表系统频繁发生内存溢出主要是因为JVM资源分配不足。在高峰期间,接口A每次进行报表计算时都需要使用大量的内存,并且这些数据会在内存中驻留很长时间。由于我们分配给JVM的内存只有3GB,当多人同时访问这些接口时,内存就不够用了,从而导致了内存溢出(OOM)。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/627361


问题二:升级机器配置后,为什么会出现频繁的GC问题和超长的GC时间?


升级机器配置后,为什么会出现频繁的GC问题和超长的GC时间?


参考回答:

升级机器配置后,虽然OOM问题得到了解决,但是由于报表系统中的对象存活时间较长,不能仅仅通过增加年轻代来解决。增加年轻代大小会减少老年代的大小,由于CMS的碎片和浮动垃圾问题,可用的空间就更少了。这导致了频繁的GC问题和超长的GC时间。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/627362


问题三:如何通过调整JVM参数来优化GC性能?


如何通过调整JVM参数来优化GC性能?


参考回答:

我们可以通过几个步骤来优化GC性能。首先,可以调整MaxTenuringThreshold参数,让年轻代的对象更快地晋升到老年代。其次,开启CMSScavengeBeforeRemark参数,使得在CMS remark前,先执行一次Minor GC将新生代清掉。最后,加入ParallelRefProcEnabled参数来并行处理Reference,以加快处理速度,缩短耗时。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/627363


问题四:为什么在改用高性能机器后,MinorGC时长会变得不可控?

为什么在改用高性能机器后,MinorGC时长会变得不可控?


参考回答:

在改用高性能机器后,由于堆空间明显加大,造成了回收时间加长。高性能机器带来了非常大的服务吞吐量,年轻代的分配速率明显提高,这导致MinorGC的时长变得不可控,有时候会超过1秒。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/627366


问题五:如何通过代码优化来减少内存占用和提高系统性能?


如何通过代码优化来减少内存占用和提高系统性能?


参考回答:

可以通过MAT分析堆快照,应该可以发现很多可以通过代码优化的地方。首先,进行select *全量排查,只允许获取必须的数据,以减少不必要的数据加载。其次,查看可能会发现报表系统中cache实际的命中率并不高,因此将Guava的Cache引用级别改成弱引用(WeakKeys),以减少内存的占用。最后,限制报表导入文件的大小,并拆分用户超大范围的查询导出请求,以降低单次操作的内存需求。这些优化措施显著地减少了内存占用并提高了系统性能。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/627367

目录
相关文章
|
30天前
|
运维 Linux Apache
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
50 3
|
3天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
12 2
|
1月前
|
运维 Java Linux
【运维基础知识】掌握VI编辑器:提升你的Java开发效率
本文详细介绍了VI编辑器的常用命令,包括模式切换、文本编辑、搜索替换及退出操作,帮助Java开发者提高在Linux环境下的编码效率。掌握这些命令,将使你在开发过程中更加得心应手。
31 2
|
28天前
|
存储 运维 监控
实时计算Flink版在稳定性、性能、开发运维、安全能力等等跟其他引擎及自建Flink集群比较。
实时计算Flink版在稳定性、性能、开发运维和安全能力等方面表现出色。其自研的高性能状态存储引擎GeminiStateBackend显著提升了作业稳定性,状态管理优化使性能提升40%以上。核心性能较开源Flink提升2-3倍,资源利用率提高100%。提供一站式开发管理、自动化运维和丰富的监控告警功能,支持多语言开发和智能调优。安全方面,具备访问控制、高可用保障和全链路容错能力,确保企业级应用的安全与稳定。
38 0
|
3月前
|
运维 Devops 持续交付
自动化运维之路:从脚本到DevOps探索后端开发:从基础到高级实践
【8月更文挑战第28天】在数字化时代的浪潮中,企业对于IT运维的要求越来越高。从最初的手动执行脚本,到如今的自动化运维和DevOps实践,本文将带你领略运维的演变之旅。我们将探索如何通过编写简单的自动化脚本来提升效率,进而介绍DevOps文化的兴起及其对现代运维的影响。文章将为你揭示,通过持续集成、持续部署和微服务架构的实践,如何构建一个高效、可靠的运维体系。准备好让你的运维工作变得更加智能化和自动化了吗?让我们一起踏上这段旅程。 【8月更文挑战第28天】 本文旨在为初学者和有一定经验的开发者提供一个深入浅出的后端开发之旅。我们将一起探索后端开发的多个方面,包括语言选择、框架应用、数据库设计
|
3月前
|
运维 应用服务中间件 nginx
自动化运维的利剑:Ansible Role 打造标准化配置
【8月更文挑战第31天】在追求效率和稳定性的今天,自动化运维不再是奢侈品,而是必需品。Ansible Role,作为自动化配置管理的利器,它如何帮助我们实现标准化部署和维护?本文将通过一个简单示例,带你了解 Ansible Role 的魅力所在,并探讨其在现代 IT 架构中的应用价值。
|
3月前
|
运维 Devops 数据库
太卷了!DevOps,就是开发要把运维卷跑了?
太卷了!DevOps,就是开发要把运维卷跑了?
|
1月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
52 4
|
3天前
|
机器学习/深度学习 数据采集 人工智能
智能运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的兴起背景、核心组件及其在现代IT运维中的应用。通过对比传统运维模式,阐述了AIOps如何利用机器学习、大数据分析等技术,实现故障预测、根因分析、自动化修复等功能,从而提升系统稳定性和运维效率。文章还深入分析了实施AIOps面临的挑战与解决方案,并展望了其未来发展趋势。 ####
|
12天前
|
机器学习/深度学习 数据采集 运维
智能化运维:机器学习在故障预测和自动化响应中的应用
智能化运维:机器学习在故障预测和自动化响应中的应用
35 4