问题的提出,分析,请参考JNI——小心,内存怪兽出没
(简单的说起来,就是java进程占用了4G内存,但是折腾来折腾去,整个JVM的堆才100M上下,其余的内存凭空消失?刨根问底之后,原来是native heap占用了内存)
看完上面的问题,再来看解决方案:
目前看来,通过调整
JVM
参数来加大
GC
触发的频率是比较现实的一种方式。下面是一些分析过程:
一.
判断
Memonry
内存所属的区
通过
jconsole
可以看到
gc
信息,其中新生代的
scavenge
回收比较频繁,如果
Memonry
在这个区应该不存在长期得不到
gc
的情况
。由此推测
Memory
应该是在
Tenured/old
区
,而这个区的内存回收次数恰好非常少。
当然参数优化的目标,就是加大
old
区的
gc
频率。
二.
观察
JVM
的堆参数配置
1.
默认配置下,堆的分配起始值为
126M
,最大
1.8G
。
2.
观察
gc
前后
java
整个堆
的使用情况,
gc
前大概占
130M,
远未达到默认设置下的内存容量
3.
进一步查看
old
区的内存
,发现在
gc
前稳定在
90M
。
而默认参数初始分配
85M
,最大
1.3G
,显然很难触发到
GC
。
三.
解决问题
1.
首要的问题就是控制
JVM
对整个
heap
的大小分配:
-Xmx300M
指定
jvm
的最大
heap
大小
,
-Xms40M
指定
jvm
的最小
heap
大小
,
2.
在减小了整个堆的前提下,优化
NewRatio
这个参数
(
指定
jvm
中
Old Generation heap
size
与
New Generation
的比例
)
将默认的
NewRatio=2
更改为更符合业务实际内存使用比例的
-XX:NewRatio=1
减小了
old
区的比例,更容易触发
gc
。
3.
另外一个猜测的可行方案:(有待验证)
启用
jvm
中的
gc
参数
-XX:MaxGCPauseMillis=<nnn>
这个参数的大概含义就是,让每次
gc
的时间不超过参数
nnn
。那么
nn
减少的时候,必然会增加到
gc
的次数,来换取每次
gc
的速度。
通过下图的数据可以求出,每次
old
区的
gc
平均耗时
34.7ms
,
那么可以
-XX:MaxGCPauseMillis=28
,也许会增加到
gc
频率。
上述
4
个标红参数已经添加
,观察几天得到的结论是,比较好的解决了这个问题。
====================================================================
分割线:下面是调优后的观察:
可以看到整个内存呈波动结构,Java的堆从20M--》60M就触发一次old区的gc。
下面看看GC的情况: MarkSweep是old区的gc策略,大概2个小时会触发一次,每次耗时
3194/112=28.5178ms,不会对应用产生明显的停摆,并且也验证了MaxGCPauseMillis参数的作用
- 大小: 46.3 KB
- 大小: 49.2 KB
- 大小: 122.7 KB
- 大小: 61.5 KB
- 大小: 31 KB
- 大小: 3.9 KB
- 大小: 10.1 KB
分享到:
相关推荐
JVM调优总结 -Xms -Xmx -Xmn -Xss JVM 调优是 Java virtual machine 的性能优化,通过调整 JVM 的参数来提高 Java 应用程序的性能。其中,-Xms、-Xmx、-Xmn、-Xss 是四个重要的参数,分别控制 JVM 的初始堆大小、...
"练习JVM调优-jvm_demo.zip"是一个压缩包,包含了用于JVM调优实践的示例项目"jvm_demo-master"。通过这个项目,我们可以深入学习和理解JVM的工作原理和调优技术。 1. **JVM结构与工作原理**: - 类加载器:加载、...
1. **内存模型**:JVM内存分为堆内存(Heap)、方法区(Method Area)、栈内存(Stack)、程序计数器(PC Register)和本地方法栈(Native Method Stack)。理解这些区域的作用和大小设置对调优至关重要。 2. **堆...
《深入解析Tomcat JVM调优》 在Java应用服务器领域,Tomcat因其轻量级、高效和开源的特点,被广泛应用于各种Web应用的部署。然而,为了确保应用的高性能和稳定性,对Tomcat的JVM进行优化是必不可少的环节。本文将...
在这个全面理解JVM并掌握常规JVM调优的教程中,我们将深入探讨JVM的工作原理、内存模型、垃圾收集机制、类加载过程以及如何进行性能优化。 一、JVM工作原理 JVM的运行过程包括编译、加载、验证、解析、初始化、执行...
本资料主要涵盖了五个核心领域:Java并发(JUC)、非阻塞I/O(NIO)、Netty框架、Tomcat服务器优化以及Java虚拟机(JVM)调优。以下是这些主题的详细说明: 1. **Java并发(JUC - Java Concurrency Utilities)** ...
1. **JVM内存模型**:JVM内存主要分为堆内存(Heap)、方法区(Method Area)、虚拟机栈(JVM Stack)、本地方法栈(Native Method Stack)和程序计数器(Program Counter Register)。了解每个区域的作用和配置参数...
### JVM调优总结:Xms、Xmx、Xmn、Xss 在Java虚拟机(JVM)的运行过程中,合理的参数配置对于提高程序性能至关重要。本文将对JVM调优中的几个关键参数进行深入解析,包括-Xms、-Xmx、-Xmn和-Xss等,帮助开发者更好...
本资料"jvm-full-gc调优-jvm-full-gc.zip"显然是针对如何减少和优化JVM的Full GC进行深入探讨的。以下将详细介绍JVM Full GC的相关知识点。 1. **理解JVM内存结构**:Java内存主要分为堆内存(Heap)和非堆内存...
【标题】"Jvm调优练习-jvm-tuning.zip" 提供了一个实践 JVM(Java Virtual Machine)调优的机会,这是一项至关重要的技能,特别是在处理大型、高性能的Java应用程序时。JVM调优涉及到调整一系列参数,以优化应用程序...
"用于测试jvm gc调优-share-jvm-gc.zip"这个压缩包文件很可能包含了一些工具、脚本或教程,用于帮助我们了解和实践JVM的垃圾收集优化。 首先,我们需要理解JVM GC的基本原理。垃圾收集器的主要任务是识别并回收不再...
总之,《JVM性能调优-JVM内存整理及GC回收》是JAVA程序员提升自身技能,优化代码执行效率,解决内存问题的宝贵资源。通过深入学习,开发者可以更好地理解JVM的工作机制,从而编写出更加高效、稳定的Java应用程序。
这个名为"monitor_tuning_Demo"的压缩包文件,很显然是为了教授如何使用JDK提供的监控工具以及进行JVM(Java虚拟机)的调优。在实际应用中,这些工具和技术对于优化Java应用性能、定位问题以及确保系统健康运行至关...
标题中提到了JVM原理、JVM调优、JVM内存模型和JAVA并发,这些都是Java虚拟机(JVM)相关的核心概念。JVM是运行Java字节码的虚拟计算机,为Java提供了一个跨平台的环境,确保Java程序可以在不同的操作系统上运行而...
1. **内存模型**:JVM内存分为堆内存(Heap)和非堆内存(Non-Heap),其中堆内存又细分为新生代(Young Generation)、老年代(Tenured Generation)和永久代(Permanent Generation或元空间)。理解这些区域的作用...
4. "jvm-monitor-master":此项目可能是一个定制化的JVM监控解决方案,具体功能需查看源代码和文档以了解详情。 三、JVM调优实践 1. 堆内存调整:根据应用的内存需求,合理设定堆大小,避免Full GC频繁发生。 2. ...
JVM内存模型和优化是Java性能调优的核心部分,理解并熟练掌握这些知识,能够帮助开发者解决实际问题,提升系统的运行效率。通过合理配置JVM参数,结合使用各种监控和诊断工具,我们可以有效地发现和修复性能问题,让...
Java虚拟机(JVM)是Java程序运行的基础,它负责解释和执行字节码,管理内存,以及优化代码性能。JVM参数调优是提升Java应用程序性能的关键环节,尤其是在高并发、...同时,持续的监控和性能测试是确保调优效果的关键。
这个“jvm-training”资料包涵盖了JVM的核心概念、内存管理、垃圾回收机制、性能优化等方面的知识。 1. **JVM架构** - 类加载器:JVM通过类加载器将.class文件加载到内存,分为引导类加载器、扩展类加载器和应用...