GC配置对性能的帮助

要了解GC对性能的作用,首先要了解相应的参数:

JVM Options For GC

1: heap size
a:-Xmx
指定jvm的最大heap大小,如:-Xmx2g

b:-Xms
指定jvm的最小heap大小,如:-Xms1g

c:-Xmn
指定jvm中New Generation的大小,如:-Xmn256m

d:-XX:PermSize
指定jvm中Perm Generation的最小值,如:-XX:PermSize=32m

e:-XX:MaxPermSize
指定Perm Generation的最大值,如:-XX:MaxPermSize=64m

f:-Xss
指定线程桟大小,如:-Xss128k

g:-XX:NewRatio
指定jvm中Old Generation heap size与New Generation的比例,在使用CMS GC的情况下此参数失效, 如:-XX:NewRatio=2

h:-XX:SurvivorRatio
指定New Generation中Eden Space与一个Survivor Space的heap size比例,-XX:SurvivorRatio=8,那么在总共New Generation为10m的情况下,Eden Space为8m

i:-XX:MinHeapFreeRatio
指定jvm heap在使用率小于n的情况下,heap进行收缩,Xmx==Xms的情况下无效,如:-XX:MinHeapFreeRatio=30

j:-XX:MaxHeapFreeRatio
指定jvm heap在使用率大于n的情况下,heap进行扩张,Xmx==Xms的情况下无效,如:-XX:MaxHeapFreeRatio=70

k:-XX:LargePageSizeInBytes
指定Java heap的分页页面大小,如:-XX:LargePageSizeInBytes=128m

2: garbage collector
a:-XX:+UseParallelGC
指定在New Generation使用parallel collector,并行收集,同时启动多个垃圾回收thread,不能和CMS gc一起使用.系统吨吐量优先,但是会有较长长时间的app pause,后台系统任务可以使用此gc

b:-XX:ParallelGCThreads
指定parallel collection时启动的thread个数,默认是物理processor的个数,如:-xx:ParallelGCThreads=8

c:-XX:+UseParallelOldGC
指定在Old Generation使用parallel collector

d:-XX:+UseParNewGC
指定在New Generation使用parallel collector,是UseParallelGC的gc的升级版本,有更好的性能或者优点,可以和CMS gc一起使用

e:-XX:+CMSParallelRemarkEnabled
在使用UseParNewGC的情况下,尽量减少mark的时间

f:-XX:+UseConcMarkSweepGC
指定在Old Generation使用concurrent cmark sweep gc,gc thread和app thread并行,所以称作concurrent.app pause时间较短,适合交互性强的系统,如web server

g:-XX:+UseCMSCompactAtFullCollection
在使用concurrent gc的情况下,防止memory fragmention,对live object进行整理,使memory碎片减少

h:-XX:CMSInitiatingOccupancyFraction=n
指示在old generation在使用了n%的比例后,启动concurrent collector,默认值是68,如:-XX:CMSInitiatingOccupancyFraction=70
有个bug,在低版本的jvm上出现,http://bugs.sun.com/bugdatabase /view_bug.do?bug_id=6486089

i:-XX:+UseCMSInitiatingOccupancyOnly
指示只有在old generation在使用了初始化的比例后concurrent collector启动收集

3:others
a:-XX:MaxTenuringThreshold
指定一个object在经历了n次young gc后转移到old generation区,在linux64的java6下默认值是15,此参数对于throughput collector无效,如:-XX:MaxTenuringThreshold=31

b:-XX:+DisableExplicitGC
禁止java程序中的full gc,如System.gc()的调用

c:-XX:+UseFastAccessorMethods
原始类型get,set方法的优化

d:-XX:+PrintGCDetails
打应垃圾收集的情况如:
[GC 15610.466: [ParNew: 229689K->20221K(235968K), 0.0194460 secs] 1159829K->953935K(2070976K), 0.0196420 secs]

e:-XX:+PrintGCTimeStamps
打应垃圾收集的时间情况,如:
[Times: user=0.09 sys=0.00, real=0.02 secs]

f:-XX:+PrintGCApplicationStoppedTime
打应垃圾收集时,系统的停顿时间,如:
Total time for which application threads were stopped: 0.0225920 seconds

JVM给了三种选择:串行收集器、并行收集器、并发收集器,但是串行收集器只适用于小数据量的情况,所以这里的选择主要针对并行收集器和并发收集器。默认情况下,JDK5.0以前都是使用串行收集器,如果想使用其他收集器需要在启动时加入相应参数。JDK5.0以后,JVM会根据当前系统配置进行判断。

1. 吞吐量优先的并行收集器
      如上文所述,并行收集器主要以到达一定的吞吐量为目标,适用于科学技术和后台处理等。
      典型配置:
          * java -Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20
            -XX:+UseParallelGC:选择垃圾收集器为并行收集器。此配置仅对年轻代有效。即上述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集。
            -XX:ParallelGCThreads=20:配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等。
          * java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC
            -XX:+UseParallelOldGC:配置年老代垃圾收集方式为并行收集。JDK6.0支持对年老代并行收集。
          * java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100
            -XX:MaxGCPauseMillis=100:设置每次年轻代垃圾回收的最长时间,如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值。
          * java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100-XX:+UseAdaptiveSizePolicy
            -XX:+UseAdaptiveSizePolicy:设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开。

2. 响应时间优先的并发收集器
      如上文所述,并发收集器主要是保证系统的响应时间,减少垃圾收集时的停顿时间。适用于应用服务器、电信领域等。
      典型配置:
          * java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:ParallelGCThreads=20 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC
            -XX:+UseConcMarkSweepGC:设置年老代为并发收集。测试中配置这个以后,-XX:NewRatio=4的配置失效了,原因不明。所以,此时年轻代大小最好用-Xmn设置。
            -XX:+UseParNewGC: 设置年轻代为并行收集。可与CMS收集同时使用。JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值。
          * java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection
            -XX:CMSFullGCsBeforeCompaction:由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此值设置运行多少次GC以后对内存空间进行压缩、整理。
            -XX:+UseCMSCompactAtFullCollection:打开对年老代的压缩。可能会影响性能,但是可以消除碎片

http://www.51testing.com/html/77/268377-216345.html

时间: 2024-10-06 22:22:40

GC配置对性能的帮助的相关文章

SOLR管理配置和性能优化JVM参数调优

我个配置:JAVA_OPTIONS="-Xmx1024m -Xms1024m -Xmn512m -XX:MaxPermSize=128m -XX:SurvivorRatio=65536 -XX:MaxTenuringThreshold=0 -Xnoclassgc -XX:+DisableExplicitGC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBefor

Nginx作为WEB服务相关配置(性能优化,网络连接,访问控制,虚拟主机,https等等)

编译安装nginx yum -y install pcre-devel groupadd -r nginx useradd -g nginx -r nginx tar xf nginx-1.6.2.tar.gz cd nginx-1.6.2 ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf--user=nginx --group=nginx --error-log-path=/var/log/nginx

GC基础和性能相关(转自MSDN)

Performance Now that we have a basic model for how things are working, let's consider some things that could go wrong that would make it slow. That will give us a good idea what sorts of things we should try to avoid to get the best performance out o

nginx配置 之 性能优化

nginx配置 之 性能优化 性能优化相关的配置 1.worker_processes number | autoworker进程的数量:通常应该为当前主机的cpu的物理核心数auto 表示和CPU内核相关,有几个内核,就会开启几个进程 2.worker_cpu_affinity cpumask ...worker_cpu_affinity auto [cpumask] 提高缓存命中率CPU MASK: 00000001:0号CPU00000010:1号CPU10000000:8号CPUwork

nginx全局配置和性能优化

nginx目录结构和命令 1.ls /apps/nginx/:         html是测试页,sbin是主程序 2.ls /apps/nginx/sbin/:  nginx 只有一个程序文件 3.ls /apps/nginx/html/:  50x.html index.html 测试网页 ?nginx:默认为启动nginx -h 查看帮助选项 -V 查看版本和配置选项 -t 测试nginx语法错误 -c filename 指定配置文件(default: /etc/nginx/nginx.c

GC浅析之三-性能调优经验总结

性能调优经验总结 问题的出现: 在日常环境下,以某server 为例,该机器的每秒的访问量均值在368左右,最大访问量在913.对外提供服务的表现为每两三个小时就有秒级别的时间客户端请求超时,在访问量增大的情况下用户请求超时频率明显增多. 现象的直接分析: 通过监控GC发现该现象,GC中比较频繁的出现promotion failed和concurrent mode failure.由于promotion failed产生的直接原因为在发送YGC时,old区因为碎片.可用空间不够,造成无法晋升对象

mysql配置以及性能优化(转)

MySQL配置文件my.cnf中文详解,附mysql性能优化方法分享 ================================================================================================= Mysql参数优化对于新手来讲,是比较难懂的东西,其实这个参数优化,是个很复杂的东西,对于不同的网站,及其在线量,访问量,帖子数量,网络情况,以及机器硬件配置都有关系,优化不可能一次性完成,需要不断的观察以及调试,才有可能得到最佳效果

mysql配置以及性能优化

MySQL配置文件my.cnf中文详解,附mysql性能优化方法分享 ================================================================================================= Mysql参数优化对于新手来讲,是比较难懂的东西,其实这个参数优化,是个很复杂的东西,对于不同的网站,及其在线量,访问量,帖子数量,网络情况,以及机器硬件配置都有关系,优化不可能一次性完成,需要不断的观察以及调试,才有可能得到最佳效果

记录:sea.js和require.js配置 与 性能对比

最近有点忙,很久无写博客,记录一下之前的配置require.js和sea.js的配置.(有误有望提出 require.js 文件目录 /app(项目使用js) /lib(require.js jq存放处) /plugin(框架对应的功能插件) require.js比较方便在于,不是amd的模块组件可以通过配置文件进行依赖配置.而且异步加载js 页面加载速度是杠杠的.当然会有点问题的,网速过慢的话,可能会出现js,timeout(可以通过配置解决. config.js (配置文件) // 配置信息