`

性能调优 - 第三仗

阅读更多

经过前两次的性能优化之后,系统性能已经得到了很大提升,不存在登陆页面打不开的情况。

又经过一段时间的观察,发现系统有如下两个比较明显的问题:

1、登进系统之后点菜单,能明显感觉到系统有停顿

2、个别实例偶尔会宕掉

 

当时拿到这两个问题的时候,比较没有头绪,尤其是第一个问题,不知道从哪里下手。所以,挑了一个感觉比较好定位的问题2入手。

 

查看了实例的日志文件,发现已经有一段时间没有往文件里面写入日志了。说明这个应用已经停止服务了。既然停止服务,当时推测认为要么实例进程已经停掉了,要么虚拟机进程宕掉了,即内存溢出了。

 

用ps -exf|grep 服务关键字 命令查了一下服务进程,发现进程还在,基本排除第一种推测。

 

然后针对第二种推测,使用jstat -gcutil pid 1000 1000 观测了一段时间的垃圾回收情况,发现老年代的内存使用率一直是100%。

看到这种结果,已经可以明确确定是虚拟机内存溢出了。这也就证明第二种推测是正确的。

 

正在得意的时候,发现另一个惊喜:那就是fullGC的次数比minorGC的次数要多的多,有经验的同学都知道,老年代的fullGC策略执行的时候,jvm是停止用户线程的响应的。说白了就是fullGC的时候,jvm是不会处理请求的。而这里的fullGC几乎占用了全部GC的时间,说明在很大的一段时间内,jvm不提供对外服务。

 

看来病灶我们已经找到,接下里就要对症下药了。

 

从jstat监控结果来看,每进行一次minorGC,就会进行一次fullGC,也即是说新生代的内存空间小。因为新生代分为三个区域:eden区,程序new出来的对象都是放到这里的。

s1区,当minorGC的时候,eden区会将没有被回收的数据放到s1

s2区,当minorGC的时候,s1区会将没有被回收的数据放到s2

 

由于我们没有设置新生代的大小,也没有设置幸存区和eden区的比率,所以新生代的内存空间很小。这样每次minorGC的时候,由于没有足够的内存来存储存活下来的对象,那么只能把数据对象放到老年代。这样相当于程序new出来的对象经新生代转调一下直接进入了老年代,那么照此发展下去,老年代很快就会内存不足,没有足够空间容纳对象的时候,就会触发fullGC。

 

所以我们要调大新生代的空间,这样保证有足够空间来存放程序new出来的对象,并保证在经过多次minorGC之后,只有很好一部分对象能存活下来。这也正是我们系统的特点,会生成很多生命周期较短的对象,它们可能在一次minorGC不会被回收,但是在多个minorGC之后一定会被回收。所以我们要新生代,有足够的空间让对象自生自灭,不要存活到老年代。

 

调整新生代的jvm参数

-Xmn1024m

-XX:survivorRatio=2

 

相关参数的含义,不在这里解释,不明白的大家百度一下。

 

经过这三仗打下来,我们的系统运行基本稳定,没有再出现性能问题。

 

只要我们有问题终究会被定位并且解决的信念,那么我们战无不胜,以此和大家共勉,谢谢~~

 

分享到:
评论

相关推荐

    从零开始学调优-Java 全技术栈 性能调优.txt

    视频教程

    《数据库性能调优--原理与技术》

    《数据库性能调优--原理与技术》是一本深入探讨数据库性能优化的专业书籍,旨在帮助读者理解和掌握提升数据库系统效率的关键技术和方法。通过学习本书,读者能够有效地解决在实际工作中遇到的数据库性能问题,提高...

    数据库性能调优--原理与技术

    ### 数据库性能调优——原理与技术 #### 一、基础知识与重要概念 **1.1 数据库性能调优概述** 数据库性能调优是确保数据库系统高效稳定运行的关键环节之一。它不仅涉及到对数据库本身的调整,还包括对底层硬件、...

    数据库性能调优--原理与技术.rar

    数据库性能调优是IT领域中的一个关键话题,尤其是在大数据时代,高效、稳定的数据处理能力直接影响着业务的运行效率。这个压缩包文件“数据库性能调优--原理与技术”很可能包含了关于如何优化数据库性能的深入讲解和...

    oracle性能调优--解决CPU高度消耗(100%)

    Oracle 性能调优 -- 解决 CPU 高度消耗 (100%) Oracle 性能调优是数据库管理和维护中非常重要的一部分。当数据库出现性能问题时,需要快速定位和解决问题,否则将影响业务的正常运作。在这里,我们将讨论如何解决 ...

    数据库性能调优--原理与技术1.pdf

    #### 三、Oracle数据库性能调优概述 Oracle数据库因其强大的功能和广泛的应用场景而备受青睐。然而,随着数据量的不断增加和技术需求的日益复杂,对Oracle数据库进行性能调优显得尤为重要。 ##### 3.1 诊断工具 -...

    JVM性能调优-JVM内存整理及GC回收

    《JVM性能调优-JVM内存整理及GC回收》是一份深入探讨Java虚拟机(JVM)优化的重要学习资料,特别适合对JAVA编程有经验的开发者。这份文档详细阐述了JVM性能调优的关键概念,包括JVM内存模型、垃圾回收(Garbage ...

    数据库性能调优-原理与技术

    ### 数据库性能调优——原理与技术 在当今数字化时代,数据成为了企业最宝贵的资产之一。随着业务量的增长和技术的发展,数据库系统面临着越来越大的压力。为了确保数据处理的速度和效率,进行有效的数据库性能调优...

    AIX性能调优-pdf

    ### AIX性能调优知识点详解 #### 一、AIX简介及内部结构 AIX(Advanced Interactive Executive)是由IBM开发的一款基于Unix的操作系统,专为IBM的Power Systems服务器设计。AIX以其高度的安全性、稳定性和灵活性而...

    Java程序性能调优-视频教程

    学习Java程序性能调优视频教程后,有助于您的专业技术大度上升。解决工作诸多问题,快来吧。

    AIX性能调优-牛新庄

    标题“AIX性能调优-牛新庄”指向了专门针对AIX操作系统进行性能调优的技术内容,AIX是IBM开发的一种UNIX操作系统,主要应用于其Power Systems服务器。性能调优是系统管理中的一项重要任务,它旨在提高系统的响应速度...

    数据库性能调优--原理与技术2.pdf

    ### 数据库性能调优——原理与技术(针对Oracle) #### 一、数据库性能调优概述 在当前数据密集型的应用环境中,数据库系统的性能直接影响着企业的业务效率和用户体验。《数据库性能调优——原理与技术2》这本书...

    通向架构师的道路(第二十四天)之Oracle性能调优-朝拜先知之旅.docx

    Oracle性能调优-朝拜先知之旅 本文主要介绍了在 Linux 环境下安装 Oracle 10g 的方法,并对 Oracle 性能调优进行了详细的说明。下面是本文的知识点总结: 一、Oracle 基本概念 * Oracle 是一种关系型数据库管理...

    11_性能调优-AWR报表解读1

    **性能调优-AWR报表解读** Oracle 10g版本引入了一个重要的性能监控工具——Automatic Workload Repository(AWR),它是数据库管理员进行性能优化的重要参考。AWR通过定期捕获数据库的状态快照(snapshot),然后...

    JVM性能调优-JVM内存整理及GC回收.docx

    JVM性能调优-JVM内存整理及GC回收 JVM(Java Virtual Machine)性能调优是 Java 开发者需要掌握的重要技能之一。 JVM 的性能调优主要涉及到 JVM 内存整理、垃圾回收(GC)机制等方面。 Java 中的值传递和引用传递...

    Java性能调优--关于垃圾回收机制的分析和指导

    Java性能调优,特别是关于垃圾回收机制的分析和指导,是优化Java应用程序的关键环节。Java的垃圾回收(Garbage Collection, GC)是自动管理内存的一种机制,它负责识别并清理那些不再使用的对象,以释放内存资源。...

    DB2性能调优-牛新庄

    DB2性能调优是数据库管理中的重要环节,它关乎到系统的响应速度、资源利用率和整体应用性能。牛新庄在这一领域有深厚的经验,他的分享对于学习和掌握DB2优化技术具有很高的价值。 DB2优化器是DB2数据库管理系统的...

    通向架构师的道路(第四天)之Tomcat性能调优-让小猫飞奔.docx

    作者提到在之前的“第三天”学习中,他们已经对Apache服务器进行了优化,现在将转向Tomcat的调优,以达到让“小猫”飞奔的效果。 【标签】:"tomcat", "tomcat性能调优" 【正文】: Tomcat性能调优的关键在于理解...

Global site tag (gtag.js) - Google Analytics