- 浏览: 180177 次
- 性别:
- 来自: 上海
文章分类
最新评论
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 486多线程和并发性并不是什么新内容,但是 Java 语言设计中的创 ... -
java linux监控
2017-03-13 17:49 424http://agapple.iteye.com/blog/1 ... -
transient和volatile两个关键字
2017-02-16 09:47 535transient和volatile两个关 ... -
java 锁机制
2016-12-09 13:43 433一段synchronized的代码被 ... -
java 正则表达式
2016-12-02 10:28 490众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字 ... -
java ClassNotFoundException和NoClassDefFoundException的差别
2016-08-17 19:47 845首先从名字上可以看出一类是异常,一类属于错误。异常可以通过异常 ... -
ThreadLocal
2016-07-19 11:10 309ThreadLocal是什么 Thre ... -
java CAS
2016-07-10 14:55 292cas 乐观锁每次不锁定整个线程,在操作之前进行判断。悲观锁独 ... -
concurrenthashmap
2016-07-10 11:11 397hash table虽然性能上不如 ... -
java 线程池的使用
2016-07-10 09:52 3471. 引言 合理利用线程池能够带来三个好处。第一:降低资源消 ... -
java.util.concurrent
2016-07-03 16:24 384我们都知道,在JDK1.5之 ... -
jvm实时监控工具
2016-04-09 09:35 423 -
哈希 、一致性哈希、余数式哈希
2016-04-07 16:10 827什么是Hash Hash,一 ... -
jvm dump 相关
2016-03-22 17:22 650http://www.cnblogs.com/edwardla ... -
深入剖析volatile关键字
2016-03-21 16:02 485深入剖析volatile关键字 ... -
java线程安全问题之静态变量、实例变量、局部变量
2016-03-08 12:52 540java多线程编程中,存在很多线程安全问题,至于什么是线程安全 ... -
有状态的bean和无状态的bean的区别
2016-03-08 11:23 1436有状态会话bean :每个用户有自己特有的一个实例,在用户的生 ... -
Java nio详解
2016-01-20 16:30 517http://www.ibm.com/developerwor ... -
java 不定长数组
2015-11-24 15:00 729在调用某个方法时,若是方法的参数个数事先无法确定该如何处理 ... -
Java stack and heap dump
2015-11-14 16:13 1020对于大型 java 应用程序来说,再精细的测试都难以堵住所有的 ...
相关推荐
JAVA垃圾收集器 21 3.1 垃圾收集简史 21 3.2 常见的垃圾收集策略 21 3.2.1 Reference Counting(引用计数) 22 3.2.2 跟踪收集器 22 3.3 JVM的垃圾收集策略 27 3.3.1 Serial Collector 28 3.3.2 Parallel Collector ...
可以使用 -XX:+UseParallelGC 选择垃圾收集器为并行收集器,并使用 -XX:ParallelGCThreads 配置并行收集器的线程数。 此外,还可以使用 -XX:MaxGCPauseMillis 设置每次年轻代垃圾回收的最长时间,如果无法满足此...
理解了应用程序的工作负荷和jvm支持的垃圾收集算法,便可以进行优化配置垃圾收集器。 垃圾收集的目的在于清除不再使用的对象。gc通过确定对象是否被活动对象引用来确定是否收集该对象。gc首先要判断该对象是否是...
最新jvm面试题合集,涵盖JVM运行时数据区、垃圾回收算法、...垃圾收集器可以根据不同的算法和策略进行配置和优化,以提高内存使用效率和性能。 类加载机制:JVM通过类加载器加载类文件,将其转换为可执行的二进制格式。
1. JVM调优 1.1 JVM调优总结(一)-一些概念 1.2 JVM调优总结(二)-一些概念 1.3 JVM调优总结(三)-基本垃圾回收算法 1.4 JVM调优总结(四)-垃圾...4.2 JVM内存管理:深入垃圾收集器与内存分配策略 4.3 深入理解JVM
/ 48 3.2.5 回收方法区 / 50 3.3 垃圾收集算法 / 51 3.3.1 标记 -清除算法 / 51 3.3.2 复制算法 / 52 3.3.3 标记-整理算法 / 54 3.3.4 分代收集算法 / 54 3.4 垃圾收集器 / 55 3.4.1 Serial收集器 / 56 ...
+UseParallelGC 选择垃圾收集器为并行收集器。此配置仅对年轻代有效。即上述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集 。可提高系统的吞吐量。 -XX:ParallelGCThreads 年轻代并行垃圾收集的前提下(对...
JVM虚拟机各知识点总结整理, 包括java虚拟机概念、堆、栈、方法区、垃圾回收概念、算法及分代转换、垃圾收集器参数配置、算法实现等各方面内容,每个点都有详细的备注描述介绍
项目背景分析解决方法总结参考资料在系统的性能测试过程中,当系统的处理能力有某种变化趋势时,除了关于等待队列、执行线程,EJB池以及数据库连接池和StatementCache方面的调优外,还要考虑到Java垃圾收集器...
常见的垃圾收集算法以及垃圾收集器的特点和工作原理;常见虚拟机监控与故障处理工具的原理和使用方法。第三部分分析了虚拟机的执行子系统,包括类文件结构、虚拟机类加载机制、虚拟机字节码执行引擎。第四部分讲解了...
2. 垃圾收集机制。 3. 代码安全性检测。 Java 运行机制: program.java(源文件)Compilerprogram.class(字节码文件)interpreter二进制代码(机器码指令)计算机上运行。 JDK 安装和配置 在搭建 ...
在 Java 中,这些无用的对象都由 GC 负责回收,同时 Java 提供了函数可以访问 GC,如运行 GC 的函数 System.gc(),但是根据 Java 语言规范定义,该函数不保证 JVM 的垃圾收集器一定会执行。 FineReport 中的内存...
不同垃圾收集器工作原理详解 GC日志分析 Spring全家桶源码分析 Tomcat架构原理 Web请求处理原理 数据访问层框架原理 架构与设计思维模式 程序中的数学 数据分析 机器智能算法剖析与应用 云原生 自动化DevOps 流量...
例如,在32G内存的机器上,适当配置Kafka的堆大小和垃圾收集器可以大幅提高性能。消息的可靠性取决于acks的设置,它决定了消息发送者需要等待多少确认。acks=0提供最高吞吐量但最易丢失消息,而acks=all则确保了最高...
该设置消除了许多系统启动过程中的主要垃圾收集事件。SunONE Studio 或其它包含更多模块的 IDE 的用户可能希望将该数值设置得更高。 下面列出了其它一些可能对 ECLIPSE 在某些系统(不是所有系统)上的性能产生...
如何配置垃圾收集 如何配置以支持高负载 在Jetty中部署应用 部署管理器 部署绑定 热部署 Context提供者 如何部署web应用 webApp提供者 如何部署第三方产品 部署展开形式的web应用 使用Jetty进行开发 如何使用Jetty...
Bea JRockit JVM支持4种垃圾收集器: 46 63.5. 如何从JVM中获取信息来进行调整 46 63.6. Pdm系统JVM调整 47 63.6.1. 服务器:前提内存1G 单CPU 47 63.6.2. 客户机:通过在JNLP文件中设置参数来调整客户端JVM 47 64....
检查IT Ocelot 是一种零配置Java代理,用于基于动态收集应用程序性能,跟踪和行为数据。 尽管具有零配置功能,但它提供了强大的配置功能,可以对所有功能进行全面而深入的定制。... 垃圾收集(暂停时间和收集统计信
【JVM】JVM内存结构,GC垃圾收集解析 52 【JVM】双亲委派模型中,从顶层到底层,都是哪些类加载器,分别加载哪些类? 55 【JVM】能不能自己写个类叫java.lang.System? 57 【JVM】类的加载过程 58 【JVM】类的初始化...