欢迎来到天天文库
浏览记录
ID:1538895
大小:65.50 KB
页数:5页
时间:2017-11-12
《tomcat中java垃圾收集调优》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Tomcat中Java垃圾收集调优1JVM内存JAVA_OPTS参数说明设置服务器端的JVM参数一般在catalina.bat文件中:JAVA_OPTS="-server-Xms2048m-Xmx2048m-Xss512k"JVM中对象的划分及管理介绍JVM根据运行于其中的对象的生存时间大致的分为3种。并且将这3种不同的对象分别存放在JVM从系统分配到的不同的内存空间。这种对象存放空间的管理方式叫做Generation管理方式。1).YoungGeneration(年轻代):用于存放“早逝”对象(即瞬
2、时对象)。例如:在创建对象时或者调用方法时使用的临时对象或局部变量。2).TenuredGeneration(年老代):用于存放“驻留”对象(即较长时间被引用的对象)。往往体现为一个大型程序中的全局对象或长时间被使用的对象。3).PermGeneration(永久保存区域):用于存放“永久”对象。这些对象管理着运行于JVM中的类和方法。------------------------------------------------------------------------------在命令行下用
3、java-XmxXXXXM-version命令来测试java可用最大内存,测试可逐渐增大XXXX的值,如果执行正常就表示指定的内存大小可用,否则会打印错误信息。通常测试windows系统(32位)最大内存为:1500M,但系统一般到1280M就差不多了------------------------------------------------------关于垃圾收集分类介绍在JVM中有两种垃圾方式:1).一种叫做Minor(次收集)。Minor在YoungGeneration(年轻代)的空间被对象
4、全部占用后执行,主要是对YoungGeneration中的对象进行垃圾收集。2).一种叫做Major(主收集)。Major是针对于整个Heapsize(Xms和Xmx设置为JVM使用的内存,但不包括永久保存区域使用的内存)的垃圾收集。其中Minor方式的收集经常发生,并且Minor收集所占用的系统时间小。而Major方式的垃圾收集则是一种“昂贵”的垃圾收集方式,因为在Major要对整个Heapsize进行垃圾收集,这会使得应用停顿的时间变得较长。关于TOMCAT内存占用介绍Tomcat运行占用内存=X
5、mx占用的内存+PermGeneration(永久保存区域)占用内存+所有Java应用创建线程数x1MJava应用每创建一个线程,在JVM的内存里也会创建一个Thread对象,但是同时也会在操作系统里创建一个真正的物理线程(参考JVM规范),操作系统会在TOMCAT余下的内存里创建这个物理线程,而不是在JVM的Xmx设置的内存堆里创建。在jdk1.4里头,默认的栈大小是256KB,但是在jdk1.5里头,默认的栈大小为1M每线程。因此,如果系统剩余内存为400M的可用内存,则Java应用最多创建400
6、个可用线程。结论:要想创建更多的线程,必须减少分配给JVM的最大内存。参数说明如下:-server:一定要作为第一个参数,在多个CPU时性能佳-Xms:初始Heap大小,使用的最小内存,cpu性能高时此值应设的大一些-Xmx:javaheap最大值,使用的最大内存上面两个值是分配JVM的最小和最大内存,取决于硬件物理内存的大小,建议均设为物理内存的一半,最大不要超过可用物理内存的80%。-Xmn:younggeneration(年轻代)的heap大小,一般设置为Xmx的3、4分之一(此值对系统性能影响
7、较大,Sun官方推荐配置为整个堆的3/8)(可使用-XX:NewSize和-XX:MaxNewsize设置年轻代的初始值和最大值)-Xincgc:启动增量垃圾收集器,缺省是关闭的。增量垃圾收集器能减少偶然发生的长时间的垃圾回收造成的暂停时间。但增量垃圾收集器和应用程序并发执行,因此会占用部分CPU在应用程序上的功能。-XX:CMSInitiatingOccupancyFraction=70发现引起promotionfailed错误的原因是CMS来不及回收(CMS默认在年老代占到90%左右才会执行),年
8、老代又没有足够的空间供GC把一些活的对象从年轻代移到年老代,所以执行FullGC。CMSInitiatingOccupancyFraction=70表示年老代占到约70%时就开始执行CMS,这样就不会频繁出现FullGC了。上两个参数设置有很大技巧,基本上满足:(Xmx-Xmn)*(100-CMSInitiatingOccupancyFraction)/100>=Xmn就不会出现promotionfailed。如果在应用中设置Xmx(最大内存)是1500
此文档下载收益归作者所有