整体考虑堆大小

-Xms3550m, 初始化堆大小。通常情况和-Xmx大小设置一样,避免虚拟机频繁自动计算后调整堆大小。 
-Xmx3550m,最大堆大小。

考虑分代设置堆大小

首先通过jstat等工具查看应用程序正常情况下需要堆大小,再根据实际情况设置。

新生代

-xmn2g,新生代大小。Sun官方推荐配置为整个堆的3/8。 
-XX:SurvivorRatio=8。Eden和Survivor的比值。

老年代

老年代=整个堆大小-新生代-永久代

永久代

-XX:Permsize=512m,设置永久代初始值。 
-XX:MaxPermsize=512m,设置永久代的最大值。 
注:Java8没有永久代说法,它们被称为元空间,-XX:MetaspaceSize=N

考虑本机直接内存

-XX:MaxDirectMemorySize=100M。默认与Java堆大最大值(-Xmx)

考虑虚拟机栈

每个线程池的堆栈大小。在jdk5以上的版本,每个线程堆栈大小为1m,jdk5以前的版本是每个线程池大小为256k。一般设置256k。 
-Xss256K.

考虑选择垃圾收集器

Serial收集器(串行收集器)

历史最悠久的串行收集器。参数-XX:UseSerialGC。不太常用。

ParNew和ParOld收集器(并发收集器)

Serial的多线程版本收集器。

Parallel Scavenge(吞吐量优先垃圾收集器)

并行收集器,不同于多线程收集器ParNew,关注吞吐量的收集器。 
-XX:MaxGCPauseMillis=10,设置垃圾收集停顿的最大毫秒数。 
-XX:GCTimeRatio=49,垃圾收集器占比,默认是99。 
-XX:+UseAdaptiveSeizPolicy,GC自适应调节策略。 
-XX:+UseParallelGC,虚拟机Server模式默认值,使用Parallel Scavenge + Serial Old进行内存回收。 
-XX:+UseParallelOldGC, 使用Parallel Scavenge + Parallel Old 进行内存回收。

CMS

CMS作为老年代收集器,不能与Parallel Scavenge并存。可能会有内存碎片问题。 
-XX:+UserConcMarkSweepGC,新生代默认用ParNew收集。也可以用-XX:+UserParNewGC强制指定新生代用ParNew收集 
-XX:ParallelGCThreads=4,设置垃圾收集线程数。默认是(CPU数量+3)/4。垃圾收集线程数不少于25%,当CPU数量小于4的时候影响大。 
-XX:CMSInitiatingOccupancyFraction=80,老年代垃圾占比达到这个阈值开始CMS收集,1.6默认是92。设置过高容易导致并发收集失败,会出现SerialOld收集的情况。 
-XX:+UseCMSCompactAtFullCollection,在FULL GC的时候, 对年老代的压缩增加这个参数是个好习惯。可能会影响性能,但是可以消除碎片。 
-XX:CMSFullGCsBeforeCompaction=1,多少次后进行内存压缩。 
-XX:+CMSParallelRemarkEnabled, 为了减少第二次暂停的时间,开启并行remark,降低标记停顿

G1(Garbage First)

-XX:+UseG1GC,谨慎使用,需要经过线上测试,还没有被设置为默认垃圾收集器。 
之前的垃圾收集器收集的范围是新生代或者老年代,而G1垃圾收集器收集的范围包括新生代和老年代整个堆。G1将Java堆划为多个大小相同的独立区域(Region),垃圾收集单位是Region。G1垃圾收集适合至少大于4G内存得系统。并且不会产生内存空间碎片。

其他参数

-XX:MaxTenuringThreshold=30,晋升老年代的年龄。 
-XX:PretenureSizeThreshold=?,晋升老年代的对象大小。没设置过。

考虑日志打印

-verbose:gc,打印GC日志 
-XX:+PrintGC,打印GC基本日志 
-XX:+PrintGCDetails,打印GC详细日志 
-XX:+PrintGCTimeStamps,打印相对时间戳 
-XX:+PrintGCApplicationStoppedTime,打印垃圾回收期间程序暂停的时间 
-XX:+PrintGCApplicationConcurrentTime,打印每次垃圾回收前,程序未中断的执行时间 
-XX:+PrintTenuringDistribution:查看每次minor GC后新的存活周期的阈值 
-XX:+PrintTLAB,查看TLAB空间的使用情况 
-Xloggc:filename,把相关日志信息记录到文件以便分析

考虑OOM(堆溢出)时保留现场日志

当抛出OOM时进行heapdump

-XX:+HeapDumpOnOutOfMemoryError,JVM异常自动生成堆转储 
-XX:HeapDumpPath=,堆转储文件名

转自:http://blog.csdn.net/csujiangyu/article/details/52071473

【JVM】6、聊聊JVM常用参数设置的更多相关文章

  1. jvm常用参数设置 good

    1.堆的大小可以通过 -Xms 和 -Xmx 来设置,一般将他们设置为相同的大小,目的是避免在每次垃圾回收后重新调整堆的大小,比如 -Xms=2g -Xmx=2g 或者 -Xms=512m -Xmx= ...

  2. jvm常用参数设置 专题

    在jdk8中 -Xms2g不合法,能通过的:-Xms2G #!/bin/bash JAVA_OPTS="-Xms4G -Xmx4G -XX:+HeapDumpOnOutOfMemoryErr ...

  3. JVM常用参数设置

    堆内存设置 示例: java -Xmx4550m -Xms4550m -Xss128k -XX:NewRatio=5 -XX:SurvivorRatio=5 -Xmx4550m:设置JVM最大可用内存 ...

  4. JVM笔记-GC常用参数设置

    GC常用参数 -Xmn -Xms -Xmx -Xss 年轻代 最小堆 最大堆 栈空间, -Xms -Xmx 一般设置成一样大小, -XX:+UseTLAB 使用TLAB,默认打开 -XX:+Print ...

  5. java jvm内存管理/gc策略/参数设置

    1. JVM内存管理:深入垃圾收集器与内存分配策略 http://www.iteye.com/topic/802638 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想 ...

  6. ubuntu 常用参数设置

        在Linux下,对于参数的设置,一般来说,都遵循这个规律.每一个功能程序,一定对于一个对于名字的配置文件.     涉及到多用户的功能配置,一定有一个全局的配置文件,对所有用户都生效,而每个用 ...

  7. Fusioncharts图表常用参数设置

    1.1 <chart>参数设置: 图表和轴的标题* caption=”String” : 图表上方的标题* subCaption=”String” : 图表上方的副标题* xAxisNam ...

  8. HotSpot JVM常用参数设置

    转自:https://www.zybuluo.com/jewes/note/57352 选项的分类 Hotspot JVM提供以下三大类选项: 1. 标准选项:这类选项的功能是很稳定的,在后续版本中也 ...

  9. JVM内存模型和关键参数设置

    一. JVM内存模型: Jvm内存模型是学好Java很重要的一部分,该部分学习能让我们在系统运维的时候,或者优化服务器的时候能够有方法,懂原理. 二. Jvm关键参数: 1. 堆大小设置参数: -Xm ...

随机推荐

  1. 4k项目--PHY通道绑定的两种模式

    1.通道绑定有两种模式: • PMA bonding• PMA and PCS bonding GT通道是不支持通道绑定的 2.PMA绑定 PMA绑定减少了PMA之间的通道之间的Skew.并且在PMA ...

  2. Anton 上课题

    Anton 上课题 Anton likes to play chess. Also he likes to do programming. No wonder that he decided to a ...

  3. Js表单验证控件-02 Ajax验证

    在<Js表单验证控件(使用方便,无需编码)-01使用说明>中,写了Verify.js验证控件的基本用法,基本可以满足大多数验证需求,如果涉及服务端的验证,则可以通过Ajax. Ajax验证 ...

  4. WebService接口定义及调用

    Web service是一个平台独立的,松耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML标准来描述.发布.发现.协调和配置这些应用程序,用于开发分布式的互操作的应用程序. WebS ...

  5. Spring AOP的实现及源码解析

    在介绍AOP之前,想必很多人都听说AOP是基于动态代理和反射来实现的,那么在看AOP之前,你需要弄懂什么是动态代理和反射及它们又是如何实现的. 想了解JDK的动态代理及反射的实现和源码分析,请参见下面 ...

  6. setlocale()函数详解——C语言

    setlocale函数 函数原型:char* setlocale (int category, const char* locale); setlocale位于头文件,setlocale() 函数既可 ...

  7. SQLServer 查看耗时较多的SQL语句(转)

    total_worker_time AS [总消耗CPU 时间(ms)],execution_count [运行次数], qs.total_worker_time AS [平均消耗CPU 时间(ms) ...

  8. 06-搭建master集群

    部署高可用 kubernetes master 集群 kubernetes master 节点包含的组件: kube-apiserver kube-scheduler kube-controller- ...

  9. Python——pytessercat识别简单的验证码

    什么是验证码 验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computersand Humans Apart” (全自动 ...

  10. Xamarin.Android 调用本地相册

    调用本地相册选中照片在ImageView上显示 代码: using System; using System.Collections.Generic; using System.Linq; using ...