linux下java应用启动参数配置

实际部署java应用时,在sun jdk1.6的环境下,为使应用能够高效率长时间稳定运行,需要配置特定的虚拟机参数。每到此时都会想有没有一个基准配置用来供选择,使用基准配置就可以使服务器性能达到一个较高水准,下面就根据实际使用情况,列出必选配置与可选配置,供系统测试或系统上线使用。


一、必选:

1、jvm类型
-server 一定要作为第一个参数,在多个CPU时性能佳,默认模式。
 默认,服务端模式,启动慢,运行快,占用内存较大,编译器优化
-client 客户端模式,启动快,占用内存较小,编译器优化
使用下列命令可以查看初始占用:
java -client -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version'
-XX:+PrintCommandLineFlags ,这个参数的作用是显示出VM初始化完毕后所有跟最初的默认值不同的参数及它们的值
java -XX:+PrintCommandLineFlags

-d64 64位java环境,建议需要使用4G以上内存时使用。同时添加压缩对象参数: -XX:+UseCompressedOops

-d32 32位java环境,普通情况下使用。

-DTEST=TEST1 设置环境变量TEST的值为TEST1

2、gc相关
-verbose:gc 打开gc日志开关
-Xloggc:./log/gc.log 将GC日志进行记录,后边可跟相对路径或绝对路径
-XX:+PrintGCDetails JVM做GC时在gc日志里记录详细的gc信息
-XX:+PrintGCTimeStamps  了解垃圾收集发生的时间
-XX:+PrintGCApplicationStoppedTime   打印垃圾回收期间程序暂停的时间
回收器选择
JVM给了三种选择(三选一,默认为并行收集器):串行收集器、并行收集器、并发收集器,但是串行收集器只适用于小数据量的情况,所以这里的选择主要针对并行收集器和并发收集器。
默认情况下,JDK5.0以前都是使用串行收集器,如果想使用其他收集器需要在启动时加入相应参数。JDK5.0以后,JVM会根据当前系统配置进行智能判断。
1、串行收集器 
--适用情况:数据量比较小(100M左右);单处理器下并且对响应时间无要求的应用。 
--缺点:只能用于小型应用 
-XX:+UseSerialGC:设置串行收集器 
2、并行收集器(吞吐量优先) 
--适用情况:“对吞吐量有高要求”,多CPU、对应用响应时间无要求的中、大型应用。举例:后台处理、科学计算。 
--缺点:应用响应时间可能较长 
-XX:+UseParallelGC:选择垃圾收集器为并行收集器。此配置仅对年轻代有效。即上述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集。 
-XX:ParallelGCThreads=20:配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等。 
-XX:+UseParallelOldGC:配置年老代垃圾收集方式为并行收集。JDK6.0支持对年老代并行收集。 
-XX:MaxGCPauseMillis=100:设置每次年轻代垃圾回收的最长时间(单位毫秒),如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值。 
-XX:+UseAdaptiveSizePolicy:设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低响应时间或者收集频率等。 
此参数建议使用并行收集器时,一直打开。 
3、并发收集器(响应时间优先) 
--适用情况:“对响应时间有高要求”,多CPU、对应用响应时间有较高要求的中、大型应用。举例:Web服务器/应用服务器、电信交换、集成开发环境。
CMS, 全称Concurrent Low Pause Collector,是jdk1.4后期版本开始引入的新gc算法,在jdk5和jdk6中得到了进一步改进,它的主要适合场景是对响应时间的重要性需求 大于对吞吐量的要求,能够承受垃圾回收线程和应用线程共享处理器资源,并且应用中存在比较多的长生命周期的对象的应用。CMS是用于对tenured generation的回收,也就是年老代的回收,目标是尽量减少应用的暂停时间,减少FullGC发生的几率,利用和应用程序线程并发的垃圾回收线程来 标记清除年老代。 
-XX:+UseConcMarkSweepGC:设置年老代为并发收集。测试中配置这个以后,-XX:NewRatio=4的配置失效了。所以,此时年轻代大小最好用-Xmn设置。
-XX:+UseParNewGC:设置年轻代为并发收集。可与CMS收集同时使用。JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值。 
-XX:+UseCMSCompactAtFullCollection:打开对年老代的压缩。可能会影响性能,但是可以消除内存碎片。 
-XX:+CMSParallelRemarkEnabled  降低标记停顿
-XX:CMSFullGCsBeforeCompaction=:由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此参数设置运行次FullGC以后对内存空间进行压缩、整理。 
-XX:+CMSIncrementalMode:设置为增量收集模式。一般适用于单CPU情况。 
-XX:CMSInitiatingOccupancyFraction=70:表示年老代空间到70%时就开始执行CMS,确保年老代有足够的空间接纳来自年轻代的对象。 
注:如果使用 throughput collector(并行收集器) 和 concurrent low pause collector(并发收集器) 这两种垃圾收集器,需要适当的挺高内存大小,为多线程做准备。

3、运行相关:
java堆内存设置 一般设置为同样的大小

-Xms1024m   初始堆大小
-Xmx1024m 最大堆大小
-Xmn256m 年轻代大小 整个堆内存大小 = 年轻代大小 + 年老代大小 + 持久代大小 。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能 影响较大,Sun官方推荐配置为整个堆的3/8

java中Permanent设置,用于保存class
-XX:PermSize=512m 持久代(perm gen)初始值
-XX:MaxPermSize=512m 持久代(perm gen)最大值


4、调试相关:
内存溢出时声称heapdump文件

-XX:+HeapDumpOnOutOfMemoryError  


可选:
-Xnoclassgc   关闭垃圾收集回收JAVA类的功能,从而使类可以更多的被重用,因此对性能稍有提高。 但是,即时在该类不被使用后它所使用的本机内存资源仍然被使用。
 若每次部署时重启,可以使用该参数,提高性能,若使用热部署,则去除该参数,否则会导致内存溢出。
-XX:ErrorFile=./hs_err_pid.log   如果JVM crash时,将错误日志输出到指定目录,默认输出在根目录下。
 
-XX:HeapDumpPath=./heapdump"   配置-XX:+HeapDumpOnOutOfMemoryError后生效,heapdump文件的存放位置


-XX:+DisableExplicitGC 禁止在运行期显式地调用 System.gc()。若程序中没有显示调用时不需要禁止,以便某些框架或引用资源正常回收垃圾
-XX:SurvivorRatio=8 Eden与Survivor的占用比例。这里的8表示,一个survivor区占用 1/8 的新生代内存,因为survivor有2个,所以是 2/8,那么Eden的占比为 6/8


非稳态选项使用说明
-XX:+

你可能感兴趣的:(eclipse插件开发,jvm参数配置,jvm参数配置优化)