JVM常见参数说明

参考
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
 

猜你喜欢

转载自wangqiaowqo.iteye.com/blog/2241112
今日推荐