- 浏览: 188021 次
- 性别:
- 来自: 上海
文章分类
最新评论
JVM监控的关键指标说明:
a) FGC的环比增加次数。Zabbix每2分钟监控一次,如果2分钟之内,FGC增加的次数高于预定阈值,就报警。
b) JVM内存使用量。当该值大于阈值的时候,就报警。
以上两个值能说明JVM运行的健康情况:如果FGC和JVM内存使用量过多,说明应用内存可能不足(容量不足),就需要扩容或者优化代码。
c) 其他参数:ygc的次数,old、perm的使用大小都需要监控起来。
具体技术方案说明:
推荐的JVM参数模板:
-server -XX:+UseCompressedOops -Xms2048m -Xmx2048m -XX:MaxPermSize=256m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+DisableExplicitGC -XX:+UseCMSInitiatingOccupancyOnly -XX:+ScavengeBeforeFullGC -XX:+UseCMSCompactAtFullCollection -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=9 -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:-ReduceInitialCardMarks -XX:+CMSPermGenSweepingEnabled -XX:CMSInitiatingPermOccupancyFraction=70 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -XX:+PrintHeapAtGC -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Xloggc:/wls/applogs/jvm/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/wls/applogs/jvm/HeapDumpOnOutOfMemoryError.log -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Xbootclasspath/p:$JBOSS_HOME/modules/org/jboss/logmanager/main/jboss-logmanager-1.2.2.GA.jar:/wls/jboss/jboss-as-7.1.1.Final/modules/org/jboss/logmanager/log4j/main/jboss-logmanager-log4j-1.0.0.GA.jar:/wls/jboss/jboss-as-7.1.1.Final/modules/org/apache/log4j/main/log4j-1.2.16.jar -Dlogging.configuration=$JBOSS_HOME/standalone/configuration/logging.properties -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Dorg.jboss.logging.Logger.pluginClass=org.jboss.logging.logmanager.LoggerPluginImpl -Dcom.sun.management.snmp.port=9998 -Dcom.sun.management.snmp.interface=localhost -Dcom.sun.management.snmp.acl=false
参数优化理由:
理由 参数
压缩对象,以节省内存 UseCompressedOops
Jvm初始化时,就限制最小和最大的内容一致,避免JVM内存大小调整的时候消耗CPU和耗时。同时为了标准化,限制jvm(最大及最小)内存为2048,虚拟机的内存为4g。并只控制持久带的大小(推荐位jvm大小的1/8),不控制新生代和老年代的大小。 -Xms2048m -Xmx2048m -XX:MaxPermSize=256m
使用新的并行、CMS回收机制,两者可兼容。选用cms的理由是,使得应用在回收时,最少的停顿。并配合cms配置参数 -XX:+UseConcMarkSweepGC -XX:+DisableExplicitGC -XX:+UseCMSInitiatingOccupancyOnly -XX:+ScavengeBeforeFullGC -XX:+UseCMSCompactAtFullCollection -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=9 -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:-ReduceInitialCardMarks -XX:+CMSPermGenSweepingEnabled -XX:CMSInitiatingPermOccupancyFraction=70
为了支持jvm的snmp监控,结合jboss容器,需要添加相关的logmanager的参数,否则会报错,并设置读取snmp的数据,只能在本机获取。 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -XX:+PrintHeapAtGC -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Xloggc:/wls/applogs/jvm/gc.log -XX:-HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/wls/applogs/jvm/HeapDumpOnOutOfMemoryError.log -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000
其他:设置编码UTF8,gc日志打印完整的日期,详情;oom时,打印日志等。 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -XX:+PrintHeapAtGC -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Xloggc:/wls/applogs/jvm/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/wls/applogs/jvm/HeapDumpOnOutOfMemoryError.log -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000
运行过程中,保持观察,可做微调。
a) FGC的环比增加次数。Zabbix每2分钟监控一次,如果2分钟之内,FGC增加的次数高于预定阈值,就报警。
b) JVM内存使用量。当该值大于阈值的时候,就报警。
以上两个值能说明JVM运行的健康情况:如果FGC和JVM内存使用量过多,说明应用内存可能不足(容量不足),就需要扩容或者优化代码。
c) 其他参数:ygc的次数,old、perm的使用大小都需要监控起来。
具体技术方案说明:
推荐的JVM参数模板:
-server -XX:+UseCompressedOops -Xms2048m -Xmx2048m -XX:MaxPermSize=256m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+DisableExplicitGC -XX:+UseCMSInitiatingOccupancyOnly -XX:+ScavengeBeforeFullGC -XX:+UseCMSCompactAtFullCollection -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=9 -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:-ReduceInitialCardMarks -XX:+CMSPermGenSweepingEnabled -XX:CMSInitiatingPermOccupancyFraction=70 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -XX:+PrintHeapAtGC -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Xloggc:/wls/applogs/jvm/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/wls/applogs/jvm/HeapDumpOnOutOfMemoryError.log -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Xbootclasspath/p:$JBOSS_HOME/modules/org/jboss/logmanager/main/jboss-logmanager-1.2.2.GA.jar:/wls/jboss/jboss-as-7.1.1.Final/modules/org/jboss/logmanager/log4j/main/jboss-logmanager-log4j-1.0.0.GA.jar:/wls/jboss/jboss-as-7.1.1.Final/modules/org/apache/log4j/main/log4j-1.2.16.jar -Dlogging.configuration=$JBOSS_HOME/standalone/configuration/logging.properties -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Dorg.jboss.logging.Logger.pluginClass=org.jboss.logging.logmanager.LoggerPluginImpl -Dcom.sun.management.snmp.port=9998 -Dcom.sun.management.snmp.interface=localhost -Dcom.sun.management.snmp.acl=false
参数优化理由:
理由 参数
压缩对象,以节省内存 UseCompressedOops
Jvm初始化时,就限制最小和最大的内容一致,避免JVM内存大小调整的时候消耗CPU和耗时。同时为了标准化,限制jvm(最大及最小)内存为2048,虚拟机的内存为4g。并只控制持久带的大小(推荐位jvm大小的1/8),不控制新生代和老年代的大小。 -Xms2048m -Xmx2048m -XX:MaxPermSize=256m
使用新的并行、CMS回收机制,两者可兼容。选用cms的理由是,使得应用在回收时,最少的停顿。并配合cms配置参数 -XX:+UseConcMarkSweepGC -XX:+DisableExplicitGC -XX:+UseCMSInitiatingOccupancyOnly -XX:+ScavengeBeforeFullGC -XX:+UseCMSCompactAtFullCollection -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=9 -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:-ReduceInitialCardMarks -XX:+CMSPermGenSweepingEnabled -XX:CMSInitiatingPermOccupancyFraction=70
为了支持jvm的snmp监控,结合jboss容器,需要添加相关的logmanager的参数,否则会报错,并设置读取snmp的数据,只能在本机获取。 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -XX:+PrintHeapAtGC -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Xloggc:/wls/applogs/jvm/gc.log -XX:-HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/wls/applogs/jvm/HeapDumpOnOutOfMemoryError.log -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000
其他:设置编码UTF8,gc日志打印完整的日期,详情;oom时,打印日志等。 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -XX:+PrintHeapAtGC -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Xloggc:/wls/applogs/jvm/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/wls/applogs/jvm/HeapDumpOnOutOfMemoryError.log -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000
运行过程中,保持观察,可做微调。
发表评论
文章已被作者锁定,不允许评论。
-
ReentrantLock与Condition
2017-03-17 14:25 526多线程和并发性并不是什么新内容,但是 Java 语言设计中的创 ... -
java linux监控
2017-03-13 17:49 481http://agapple.iteye.com/blog/1 ... -
transient和volatile两个关键字
2017-02-16 09:47 572transient和volatile两个关 ... -
java 锁机制
2016-12-09 13:43 465一段synchronized的代码被 ... -
java 正则表达式
2016-12-02 10:28 516众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字 ... -
java ClassNotFoundException和NoClassDefFoundException的差别
2016-08-17 19:47 905首先从名字上可以看出一类是异常,一类属于错误。异常可以通过异常 ... -
ThreadLocal
2016-07-19 11:10 326ThreadLocal是什么 Thre ... -
java CAS
2016-07-10 14:55 328cas 乐观锁每次不锁定整个线程,在操作之前进行判断。悲观锁独 ... -
concurrenthashmap
2016-07-10 11:11 421hash table虽然性能上不如 ... -
java 线程池的使用
2016-07-10 09:52 3711. 引言 合理利用线程池能够带来三个好处。第一:降低资源消 ... -
java.util.concurrent
2016-07-03 16:24 407我们都知道,在JDK1.5之 ... -
jvm实时监控工具
2016-04-09 09:35 459 -
哈希 、一致性哈希、余数式哈希
2016-04-07 16:10 859什么是Hash Hash,一 ... -
jvm dump 相关
2016-03-22 17:22 680http://www.cnblogs.com/edwardla ... -
深入剖析volatile关键字
2016-03-21 16:02 531深入剖析volatile关键字 ... -
java线程安全问题之静态变量、实例变量、局部变量
2016-03-08 12:52 569java多线程编程中,存在很多线程安全问题,至于什么是线程安全 ... -
有状态的bean和无状态的bean的区别
2016-03-08 11:23 1491有状态会话bean :每个用户有自己特有的一个实例,在用户的生 ... -
Java nio详解
2016-01-20 16:30 549http://www.ibm.com/developerwor ... -
java 不定长数组
2015-11-24 15:00 765在调用某个方法时,若是方法的参数个数事先无法确定该如何处理 ... -
Java stack and heap dump
2015-11-14 16:13 1057对于大型 java 应用程序来说,再精细的测试都难以堵住所有的 ...
相关推荐
垃圾收集器的选择和配置对应用程序的性能有着显著影响,特别是在处理大规模数据和高并发的场景下。了解各种垃圾收集器的特点、优势、劣势以及使用场景对于优化Java应用至关重要,特别是对于准备BAT(百度、阿里巴巴...
在Java中,如果一个对象无法通过根(如静态变量或栈上的对象引用)或另一个可达对象访问,那么它被认为是不可达的,可以被垃圾收集器回收。 垃圾收集策略包括多种,如标记-清除、复制、标记-压缩和分代收集等。这些...
在 Java 虚拟机中,GC(Garbage Collection)收集器是 JVM 的一个重要组件,它负责回收 Java 应用程序中的垃圾对象,从而维持应用程序的性能和可靠性。JvmGC 收集器是 JVM 中的三个主要 GC 收集器之一,分别是 ...
Java虚拟机(JVM)是Java程序运行的基础,它为Java应用程序提供了运行环境。...总的来说,理解JVM内存分配和GC原理,以及如何选择和配置垃圾收集器,对于提升Java应用的性能和稳定性有着至关重要的作用。
在Java编程中,JVM(Java虚拟机)的垃圾回收机制是自动管理内存的重要部分。垃圾回收机制负责回收那些不再被程序使用、即...开发者需要根据应用特点和运行环境选择合适的垃圾收集器和配置参数,以达到最优的性能表现。
在实际应用中,JVM提供了多种GC策略,如串行GC、并行GC、并发标记清除(CMS)和G1垃圾收集器等。选择合适的GC策略,结合调整新生代和老年代的大小、暂停时间目标(Pause Time Goal)、吞吐量目标等参数,是进行JVM...
2. **Garbage Collection调优**: 使用JMX,可以监视垃圾收集器的运行情况,甚至动态调整GC参数。 3. **类加载监控**: 可以查看已加载的类信息,包括类的数量、大小等。 4. **JVM配置调整**: 通过JMX,可以在运行时...
它不仅向读者提供了JVM垃圾收集机制的理论知识,还提供了实操指导,比如如何选择和调优垃圾收集器以及使用哪些工具来评估垃圾收集器性能。对于开发人员来说,掌握这些知识可以帮助他们编写出性能更优、稳定性更高的...
Java虚拟机(JVM)是运行Java程序的核心环境,它负责解释执行Java...了解这些垃圾收集器和算法是深入理解Java虚拟机性能优化的基础,有助于开发者更有效地编写Java代码和配置虚拟机参数,从而提升应用的性能和稳定性。
- **G1(Garbage-First)GC**:新一代的垃圾收集器,目标是实现低延迟。 4. **JVM启动参数设置**: - `-Xms` 和 `-Xmx` 分别设置堆的初始大小和最大大小。 - `-XX:NewRatio` 设定新生代与老年代的比例。 - `-XX...
Jvm性能优化还需要考虑到类加载器的选择和配置、堆的大小和结构的选择、垃圾收集器的选择和配置等多方面的因素。 Jvm性能优化是一个非常复杂的过程,需要我们从多方面考虑、选择合适的垃圾收集器、类加载器、堆的...
本文将深入探讨两个重要的垃圾收集器——ParNew和Concurrent Mark Sweep (CMS) ——以及它们在JVM性能调优中的作用,特别是基于三色标记算法的实现。 首先,ParNew垃圾收集器是新生代(Young Generation)的默认...
4. **垃圾回收器选择**:在吞吐量优先的情况下,可以选择并行收集器 (`-XX:+UseParallelGC`)。并行收集器通过利用多核处理器的并行能力,提高垃圾回收效率,适合高负载的服务器应用。 5. **监控和调试**:启用详细...
如果从GC Roots到某个对象没有任何引用链相连,那么该对象被认为是不可达的,可以被垃圾收集器回收。GC Roots包括虚拟机栈中的本地变量表中引用的对象、方法区中类静态属性引用的对象、常量池引用的对象、本地方法栈...
G1垃圾收集器是Java虚拟机(JVM)的一部分,它引入了区域(Region)的概念,将堆内存划分为多个固定大小的区域,并采用分代收集策略。 在G1收集器的工作流程中,区域可以被分为新生代(Young Generation)、老年代...
Shenandoah也是一种低延迟的垃圾收集器,旨在减少GC停顿时间。它可以实现接近零停顿的垃圾回收。 **2.7 Region-based GC(基于区域的垃圾回收器)** 此类垃圾回收器将堆空间划分为多个区域,每个区域根据其对象...
【JVM中的CMS收集器详解】 CMS(Concurrent Mark Sweep)收集器,全称为"Mostly Concurrent Mark and Sweep Garbage Collector...因此,合理配置JVM参数和选择适合的垃圾收集器是优化Java应用程序性能的关键步骤之一。
- **垃圾收集器选择**:通过`-XX:+UseParallelGC`、`-XX:+UseParallelOldGC`、`-XX:+UseParNewGC`和`-XX:+UseCMS`等参数选择合适的垃圾收集器。 - **其他参数**:例如`XX:ParallelGCThreads`用于设置并行收集时的...
2. **选择合适的垃圾收集器**:如新生代GC选择ParNew,老年代选择CMS或G1,以平衡吞吐量和响应时间。 3. **调整垃圾收集参数**:例如设置新生代和老年代的比例,开启并行或并发收集等。 4. **使用JIT编译**:让热点...
“-XX:+UseConcMarkSweepGC”和“-XX:+UseParallelGC”选择不同的垃圾收集器策略,以适应不同应用场景的性能需求。还有像“-XX:MaxTenuringThreshold”用于设置对象晋升老年代的阈值,以及“-XX:...