参考 http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html 1、web应用 /opt/cafe/jdk1.6.0_32/bin/java -Djava.util.logging.config.file=/opt/cafe/tomcat6_www/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -Xms4096M -Xmx4096M -XX:SurvivorRatio=4 -Xss512k -XX:PermSize=512m -XX:MaxPermSize=512m -XX:-DisableExplicitGC -verbosegc -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=70 -XX:ParallelCMSThreads=8 -XX:ParallelGCThreads=8 -XX:MaxTenuringThreshold=5 -XX:-UseAdaptiveSizePolicy -XX:TargetSurvivorRatio=90 -XX:+ScavengeBeforeFullGC -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/logs/laifeng/web/oom.log -Xloggc:/opt/logs/laifeng/web/gc.log -Dspring.profiles.active=online -Djava.endorsed.dirs=/opt/cafe/tomcat6_www/endorsed -classpath /opt/cafe/tomcat6_www/bin/bootstrap.jar -Dcatalina.base=/opt/cafe/tomcat6_www -Dcatalina.home=/opt/cafe/tomcat6_www -Djava.io.tmpdir=/opt/cafe/tomcat6_www/temp org.apache.catalina.startup.Bootstrap start 相关说明如下: #JDK默认的logging配置文件为:$JAVA_HOME/jre/lib/logging.properties,可以使用系统属性java.util.logging.config.file指定相应的配置文件对默认的配置文件进行覆盖 -Djava.util.logging.config.file=/opt/cafe/tomcat6_www/conf/logging.properties #LogManager作为全局日志管理器负责维护日志配置和日志继承结构。LogManager通过“java.util.logging.manager”系统参数指定,程序可以通过LogManager.getLogManager()方法得到这个全局日志管理器。缺省情况下LogManager的配置文件为当前JRE目录下的lib/logging.properties,也可以通过指定"java.util.logging.config.class"或"java.util.logging.config.file"环境变量改变默认的配置方式。其中"java.util.logging.config.class"为自定义配置类,负责完成配置信息的初始化;"java.util.logging.config.file"用于指定自定义配置文件。 -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager #-Xms<n>[g|m|k] Java堆的初始和最小尺寸,新生代和老年代的总和。 <n> 是尺寸大小,[g|m|k]标识尺寸的单位。java堆的扩展和缩减需要Full GC,所以注重延迟或吞吐量性能的应用程序通常应把-Xms和-Xmx设置成相同的值。 -Xms4096M #-Xmx<n>[g|m|k] Java堆的最大尺寸,新生代和老年代的总和。 -Xmx4096M #-XX:SurvivorRatio=<n>单块Survivor区和Eden区的大小比率。 survivor size = -Xmn<n>/( -XX:SurvivorRatio=<n> + 2) 指定的比率越大,Survivor区的尺寸越小 #-Xmn<n>[g|m|k] 同时设置新生代的初始、最小和最大尺寸。 -XX:SurvivorRatio=4 #-Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。 -Xss512k #-XX:PermSize=<n>[g|m|k] 永久代的初始和最小尺寸。永久代的尺寸会随应用的需要而扩展或缩减,特别是需要加载类或存储intern String的情况。永久代的扩展或缩减需要Full GC, 所以注重延迟或吞吐量性能的应用程序应把-XX:PermSize和-XX:MaxPermSize设置成相同的值。 -XX:PermSize=512m #-XX:MaxPermSize=<n>[g|m|k] 永久代的最大尺寸。 -XX:MaxPermSize=512m #-XX之后的"-"告知HotSpot VM关闭自适应调整策略。反之,"+"通知HotSpot VM开启这个特性。 #-XX:-DisableExplicitGC explicit 明确的。禁止因显式调用System.gc()而引起的Full GC。 -XX:-DisableExplicitGC #-verbose:gc 报告每次垃圾收集时的基本GC信息。 -verbose:gc #-XX:+UseParNewGC 开启多线程,Stop-The-World的新生代垃圾收集器,需要配合以并发为主的老年代垃圾收集器CMS 设定-XX:+UseConcMarkSweepGC时,会自动开启-XX:+UseParNewGC -XX:+UseParNewGC #-XX:+UseConcMarkSweepGC 开启HotSpot VM的CMS收集器。它会自动开启-XX:+UseParNewGC,新生代使用多线程垃圾收集器,老年代使用CMS收集器。 -XX:+UseConcMarkSweepGC #-XX:+UseCMSCompactAtFullCollection 在FULL GC的时候,对年老代的压缩。CMS是不会移动内存的, 因此, 这个非常容易产生碎片, 导致内存不够用, 因此, 内存的压缩这个时候就会被启用。 增加这个参数是个好习惯。可能会影响性能,但是可以消除碎片。 -XX:+UseCMSCompactAtFullCollection #-XX:CMSFullGCsBeforeCompaction=0 多少次GC后进行内存压缩。由于并发收集器不对内存空间进行压缩,整理,所以运行一段时间以后会产生"碎片",使得运行效率降低.此值设置运行多少次GC以后对内存空间进行压缩,整理。 -XX:CMSFullGCsBeforeCompaction=0 #-XX:+CMSClassUnloadingEnabled 相对于并行收集器,CMS收集器默认不会对永久代进行垃圾回收。如果希望对永久代进行垃圾回收,可用设置标志-XX:+CMSClassUnloadingEnabled。在早期JVM版本中,要求设置额外的标志-XX:+CMSPermGenSweepingEnabled。注意,即使没有设置这个标志,一旦永久代耗尽空间也会尝试进行垃圾回收,但是收集不会是并行的,而再一次进行Full GC。 -XX:+CMSClassUnloadingEnabled #-XX:-CMSParallelRemarkEnabled 降低标记停顿 表示并行remark 存疑 -XX:-CMSParallelRemarkEnabled #-XX:CMSInitiatingOccupancyFraction=<percent> Initiating Occupancy Fraction 起始占用率。 老年代占用达到该百分比时,就会引发CMS的第一次垃圾收集周期。 -XX:CMSInitiatingOccupancyFraction=70 #-XX:ConcGCThreads 标志-XX:ConcGCThreads=<value>(早期JVM版本也叫-XX:ParallelCMSThreads)定义并发CMS过程运行时的线程数。比如value=4意味着CMS周期的所有阶段都以4个线程来执行。尽管更多的线程会加快并发CMS过程,但其也会带来额外的同步开销。因此,对于特定的应用程序,应该通过测试来判断增加CMS线程数是否真的能够带来性能的提升。如果还标志未设置,JVM会根据并行收集器中的-XX:ParallelGCThreads参数的值来计算出默认的并行CMS线程数。该公式是ConcGCThreads = (ParallelGCThreads + 3)/4。因此,对于CMS收集器, -XX:ParallelGCThreads标志不仅影响“stop-the-world”垃圾收集阶段,还影响并发阶段。总之,有不少方法可以配置CMS收集器的多线程执行。正是由于这个原因,建议第一次运行CMS收集器时使用其默认设置, 然后如果需要调优再进行测试。只有在生产系统中测量(或类生产测试系统)发现应用程序的暂停时间的目标没有达到 , 就可以通过这些标志应该进行GC调优。并发的线程数默认为:( 并行GC线程数+3)/4,也可通过ParallelCMSThreads指定。 -XX:ParallelCMSThreads=8 #-XX:ParallelGCThreads=<n> 控制多线程垃圾收集器垃圾收集线程的并行数,<n>是运行的线程数。建议显式设置垃圾收集线程的并行数,该数应该小于HotSpot VM的默认值。运行在一个系统上的垃圾收集线程,总数不应该超过Runtime.availableProcessors()。 -XX:ParallelGCThreads=8 #-XX:MaxTenuringThreshold=<n> Tenuring Threshold 期限阈(yu)值。设置最大晋升阈值为<n>。将达到这个阈值的对象从新生代提升到老年代,默认值是15。 -XX:MaxTenuringThreshold=5 #-XX:-UseAdaptiveSizePolicy ("-"为关闭)关闭自适应调整新生代Eden区和Survivor区尺寸的特性。用-XX:UseParallelGC和-XX:+UseParalleOldGC设定Throughput收集器时,会自动开启自适应尺寸调整。 -XX:-UseAdaptiveSizePolicy #-XX:TargetSurvivorRatio=<percent> 值是Surivor区被占用的百分数,而不是比率,默认为50%。90%的好处是,有助于提高Survivor区的使用率。 -XX:TargetSurvivorRatio=90 #-XX:+ScavengeBeforeFullGC Scavenge 打扫。HotSpot VM在Full GC前会先做一次Minor GC,分担一部分Full GC原本要做的工作,在两次独立的GC之间,Java线程有机会得以运行,从而缩短最大停顿时间,但也会拉长整体的停顿时间。 -XX:+ScavengeBeforeFullGC #-XX:+PrintGC 报告每次垃圾收集时的基本GC信息。 -XX:+PrintGC #-XX:+PrintGCDetails 开启新生代、老年代和永久代垃圾收集统计信息的详细报告。 -XX:+PrintGCDetails #-XX:+PrintGCTimeStamps 在每次垃圾收集时打印时间戳,指示自JVM启动以来的流逝时间。可以输出垃圾收集发生时的时间信息。 -XX:+PrintGCTimeStamps #-XX:+HeapDumpOnOutOfMemoryError 在OutOfMemoryError发生时,生成JVM堆的转储文件。堆的转储文件创建在启动JVM的目录里,文件名形如 java_pid<JVM process id>.hprof <JVM process id>是执行Java程序的JVM进程的进程ID。 -XX:+HeapDumpOnOutOfMemoryError #-XX:HeapDumpPath 将堆转储文件直接生成到指定的目录位置。 -XX:HeapDumpPath=/opt/logs/laifeng/web/oom.log #-Xloggc将垃圾收集的统计信息打印到文件中 -Xloggc:/opt/logs/laifeng/web/gc.log #Profile 参考:http://sishuok.com/forum/blogPost/list/7936.html profile,剖面,大体意思是:我们程序可能从某几个剖面来执行应用,比如正式机环境、测试机环境、开发机环境等,每个剖面的配置可能不一样(比如开发机可能使用本地的数据库测试,正式机使用正式机的数据库测试)等;因此呢,就需要根据不同的环境选择不同的配置;如果用过maven,maven中就有profile的概念。 profile有两种: 默认的:通过“spring.profiles.default”属性获取,如果没有配置默认值是“default” 明确激活的:通过“spring.profiles.active”获取 查找顺序是:先进性明确激活的匹配,如果没有指定明确激活的(即集合为空)就找默认的;配置属性值从Environment读取。 API请参考Environment部分。设置profile属性,常见的有三种方式: 一、启动Java应用时,通过-D传入系统参数 查看复制到剪贴板打印 -Dspring.profiles.active=dev 二、如果是web环境,可以通过上下文初始化参数设置 查看复制到剪贴板打印 <context-param> <param-name>spring.profiles.active</param-name> <param-value>dev</param-value> </context-param> 三 、通过自定义添加PropertySource 查看复制到剪贴板打印 Map<String, Object> map = new HashMap<String, Object>(); map.put("spring.profiles.active", "dev"); MapPropertySource propertySource = new MapPropertySource("map", map); env.getPropertySources().addFirst(propertySource); 四、直接设置Profile 查看复制到剪贴板打印 env.setActiveProfiles("dev", "test"); 以上方式都可以设置多个profile,多个之间通过如逗号/分号等分隔。 -Dspring.profiles.active=online #JVM系统属性中有两个特殊的属性: {java.ext.dirs} 可选包扩展机制 {java.endorsed.dirs} 包升级替换机制 可以的简单理解为-Djava.endorsed.dirs指定的目录面放置的jar文件,将有覆盖系统API的功能。可以牵强的理解为,将自己修改后的API打入到虚拟机指定的启动API中,取而代之。但是能够覆盖的类是有限制的,其中不包括java.lang包中的类。 -Djava.endorsed.dirs=/opt/cafe/tomcat6_www/endorsed #catalina.base指 向每个Tomcat目 录私有信息的位置,就是conf、logs、temp、webapps和work的父目录 -Dcatalina.base=/opt/cafe/tomcat6_www #catalina.home指向公用信息的位置,就是bin和lib的父目 录。 -Dcatalina.home=/opt/cafe/tomcat6_www #java.io.tmpdir系统属性里指的是Java虚拟机用于创建并存储临时文件的一个临时目录。 -Djava.io.tmpdir=/opt/cafe/tomcat6_www/temp 2、java应用1: 房间状态 java -server -DchatAppLocalId=cms-1 -Dlocal_ip=10.100.20.46 -Dchatroom_manager_server_port=2000 -Dchatroom_manager_server_id=center-server-release-1.1 -DisRecovery=true -Dprofiles.active=online -DshardId=1 -Xms4024m -Xmx4024m -Xmn1500m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/logs/chat-cms/1 -XX:MaxDirectMemorySize=2g -XX:SurvivorRatio=8 -XX:-UseAdaptiveSizePolicy -XX:+UseConcMarkSweepGC -XX:ParallelGCThreads=24 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/opt/logs/chat-cms/jvm/gc.log.1 -XX:MaxTenuringThreshold=10 -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -cp .:ddshow.imserver-0.0.1-SNAPSHOT.jar:lib/* com.youku.ddshow.Main application-online.conf -server 指示HotSpotVM把应用当成服务器类程序进行优化。适用于高吞吐量比启动时间和内存占用更重要的应用程序。 -XX:MaxDirectMemorySize DirectMemory是java nio引入的,直接以native的方式分配内存,不受jvm管理。这种方式是为了提高网络和文件IO的效率,避免多余的内存拷贝而出现的。原来,DirectMemory 的默认大小是64M,而JDK6之前和JDK6的某些版本的SUN JVM,存在一个BUG,在用-Xmx设定堆空间大小的时候,也设置了DirectMemory的大小。加入设置了-Xmx2048m,那么jvm最终可分配的内存大小为4G多一些,是预期的两倍。解决方式是设置jvm参数-XX:MaxDirectMemorySize=128m,指定DirectMemory的大小。 -XX:MaxDirectMemorySize=2g #-XX:CMSFullGCsBeforeCompaction=5 多少次GC后进行内存压缩。由于并发收集器不对内存空间进行压缩,整理,所以运行一段时间以后会产生"碎片",使得运行效率降低.此值设置运行多少次GC以后对内存空间进行压缩,整理。 -XX:CMSFullGCsBeforeCompaction=5 用户状态 java -server -DchatAppLocalId=us-1 -Dlocal_ip=10.100.20.46 -Duser_status_server_port=8896 -Duser_status_server_id=user-status-server-release-1.1 -Dprofiles.active=online -DshardId=1 -Xms4G -Xmx4G -XX:+HeapDumpOnOutOfMemoryError -XX:MaxDirectMemorySize=2g -XX:HeapDumpPath=/opt/logs/chat-us/1 -cp .:ddshow.imserver-0.0.1-SNAPSHOT.jar:lib/* com.youku.ddshow.Main application-online.conf cps web应用 /opt/cafe/jdk1.6.0_32/bin/java -Djava.util.logging.config.file=/opt/cafe/tomcat6_cps1/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -Xms4096M -Xmx4096M -XX:SurvivorRatio=4 -Xss512k -XX:PermSize=512m -XX:MaxPermSize=512m -XX:-DisableExplicitGC -verbosegc -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=70 -XX:ParallelCMSThreads=8 -XX:ParallelGCThreads=8 -XX:MaxTenuringThreshold=5 -XX:-UseAdaptiveSizePolicy -XX:TargetSurvivorRatio=90 -XX:+ScavengeBeforeFullGC -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/logs/laifeng/web/oom.log -Xloggc:/opt/logs/laifeng/web/gc.log -Dspring.profiles.active=online-stat -DshardId=2 -Djava.endorsed.dirs=/opt/cafe/tomcat6_cps1/endorsed -classpath /opt/cafe/tomcat6_cps1/bin/bootstrap.jar -Dcatalina.base=/opt/cafe/tomcat6_cps1 -Dcatalina.home=/opt/cafe/tomcat6_cps1 -Djava.io.tmpdir=/opt/cafe/tomcat6_cps1/temp org.apache.catalina.startup.Bootstrap start -classpath /opt/cafe/tomcat6_cps1/bin/bootstrap.jar 3、java应用2: 消费task java -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/opt/cafe/ddshow/consumer-pay/logs/startup_gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/cafe/ddshow/consumer-pay/logs/startup_oom.log -Dspring.profiles.active=test_11 -cp /opt/cafe/ddshow/consumer-pay/ddshow-consumer-pay-0.0.1-SNAPSHOT/classes:/opt/cafe/ddshow/consumer-pay/ddshow-consumer-pay-0.0.1-SNAPSHOT/lib/*:/opt/cafe/ddshow/consumer-pay/ddshow-consumer-pay-0.0.1-SNAPSHOT com.youku.ddshow.consumer.Bootstrap task任务 java -Dspring.profiles.active=online-stat -cp /opt/cafe/task/ddshow-task-0.0.1-SNAPSHOT/classes:/opt/cafe/task/ddshow-task-0.0.1-SNAPSHOT/lib/* com.youku.ddshow.task.Bootstrap emitor服务 /opt/cafe/jdk1.6.0_32/bin/java -Dproc_emit -Xmx512m -XX:+UseConcMarkSweepGC -Xss256k -classpath /opt/cafe/agent-log/conf:/opt/cafe/jdk1.6.0_32/lib/tools.jar:/opt/cafe/agent-log/youku-shark-emitor-agent-1.0.6.1.jar:/opt/cafe/agent-log/lib/barchart-udt-bundle-2.3.0.jar:/opt/cafe/agent-log/lib/commons-beanutils-1.8.3.jar:/opt/cafe/agent-log/lib/commons-codec-1.6.jar:/opt/cafe/agent-log/lib/commons-lang-2.6.jar:/opt/cafe/agent-log/lib/commons-logging-1.1.1.jar:/opt/cafe/agent-log/lib/data-metrics-client-1.0.1.jar:/opt/cafe/agent-log/lib/dom4j-1.6.1.jar:/opt/cafe/agent-log/lib/httpclient-4.2.2.jar:/opt/cafe/agent-log/lib/httpcore-4.2.2.jar:/opt/cafe/agent-log/lib/jackson-annotations-2.2.2.jar:/opt/cafe/agent-log/lib/jackson-core-2.2.2.jar:/opt/cafe/agent-log/lib/jackson-databind-2.2.2.jar:/opt/cafe/agent-log/lib/jetty-6.1.24.jar:/opt/cafe/agent-log/lib/jetty-util-6.1.24.jar:/opt/cafe/agent-log/lib/log4j-1.2.16.jar:/opt/cafe/agent-log/lib/metrics-core-3.0.2.jar:/opt/cafe/agent-log/lib/metrics-json-3.0.2.jar:/opt/cafe/agent-log/lib/servlet-api-2.5-20081211.jar:/opt/cafe/agent-log/lib/slf4j-api-1.7.5.jar:/opt/cafe/agent-log/lib/slf4j-log4j12-1.6.1.jar:/opt/cafe/agent-log/lib/xml-apis-1.0.b2.jar:/opt/cafe/agent-log/lib/youku-shark-agent-0.6.0.jar:/opt/cafe/agent-log/lib/youku-shark-commons-0.6.0.jar:/opt/cafe/agent-log/lib/zkclient-2.0.jar:/opt/cafe/agent-log/lib/zookeeper-3.4.5.jar com.youku.shark.emitor.SharkEmitor
JVM常见参数说明
猜你喜欢
转载自wangqiaowqo.iteye.com/blog/2241112
今日推荐
周排行