tomcat JVM 性能优化
2016-05-14 23:00
302 查看
简单回顾一下Java内存模型:
程序计数器:
是一块较小的内存空间,可以看做当前线程所执行的字节码的行号指示器;如果执行的是native方法,计数器的值为空。
Java虚拟机栈:
生命周期与线程相同,内存模型执行一个方法时会创建一个栈帧用来存储局部变量、动态链接、方法出口。
局部变量存放了编译器的基本数据类型(boolean、byte、char、short、int、long、float、double)、对象引用类型(指向对象起始地址的指针)
本地方法栈:
native方法
Java堆:
所有对象实例、数组都分配在堆上。又分为新生代(Eden空间、两个Survivor空间)、老年代
方法区(又称永久代):
存储虚拟机加载的类信息、常量、静态常量、、即时编译器编译后的的代码
进入主题垃圾收集器
介绍各种垃圾收集器前还要简单提一下几种垃圾收集算法(具体请自行百度)
1.标记-清除
2.复制
3.标记-整理
4.分代收集
Serial(串行)收集器:
历史悠久,很古老的单线程收集器
缺点:在垃圾回收时需要暂停正常工作的线程
ParNew收集器:
Serial的多线程版,许多Server模式下的虚拟机中首选的新生代收集器
Parallel(并行) Scavenge(清理)收集器(又称:吞吐量优先的收集器):
新生代收集器,使用复制算法,又是并行的多线程收集器,它的目标是达到一个可控制的吞吐量=运行代码时间/(运行代码时间+垃圾收集时间)
Serial Old收集器:
Serial收集器老年代版
Parallel Old收集器:
Parallel Scavenge 老年代版本
CMS收集器:
全称:Concurrent(并行) Mark(标记) Sweep(清理),是以最短停顿时间为目标的收集器 注:收集器在垃圾回收的时候会暂停所有工作的线程,这里的最短停顿时间就是暂停线程的时间。
G1收集器:
待补充。。。
说了这么理论知识不如直接来点儿实在的,下面贴出我的tomcat JVM调优参数并对参数做出介绍:
此配置仅是测试,非正式环境配置,请自行根据项目情况进行配置
JAVA_OPTS="-Xms1024m -Xmx1024m -Xmn384m -Xss256k -XX:MaxGCPauseMillis=100 -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0
-Djava.awt.headless=true"
各项参数介绍:
-[b]Xmx1024m:设置JVM最大可用内存为1024M。
-Xms1024m:设置JVM促使内存为1024m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmn384m:设置年轻代大小为384m。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-Xss256k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。[/b]
-XX:MaxGCPauseMillis=100:每次年轻代垃圾回收的最长时间(最大暂停时间)单位是毫秒
-XX:+UseConcMarkSweepGC:设置年老代为并发收集。
-XX:CMSInitiatingOccupancyFraction=80: 使用cms作为垃圾回收使用80%后开始CMS收集
-XX:+UseCMSCompactAtFullCollection:打开对年老代的压缩。可能会影响性能,但是可以消除碎片
-XX:CMSFullGCsBeforeCompaction=0:由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此值设置运行多少次GC以后对内存空间进行压缩、整理。
对应的参数列表
程序计数器:
是一块较小的内存空间,可以看做当前线程所执行的字节码的行号指示器;如果执行的是native方法,计数器的值为空。
Java虚拟机栈:
生命周期与线程相同,内存模型执行一个方法时会创建一个栈帧用来存储局部变量、动态链接、方法出口。
局部变量存放了编译器的基本数据类型(boolean、byte、char、short、int、long、float、double)、对象引用类型(指向对象起始地址的指针)
本地方法栈:
native方法
Java堆:
所有对象实例、数组都分配在堆上。又分为新生代(Eden空间、两个Survivor空间)、老年代
方法区(又称永久代):
存储虚拟机加载的类信息、常量、静态常量、、即时编译器编译后的的代码
进入主题垃圾收集器
介绍各种垃圾收集器前还要简单提一下几种垃圾收集算法(具体请自行百度)
1.标记-清除
2.复制
3.标记-整理
4.分代收集
Serial(串行)收集器:
历史悠久,很古老的单线程收集器
缺点:在垃圾回收时需要暂停正常工作的线程
ParNew收集器:
Serial的多线程版,许多Server模式下的虚拟机中首选的新生代收集器
Parallel(并行) Scavenge(清理)收集器(又称:吞吐量优先的收集器):
新生代收集器,使用复制算法,又是并行的多线程收集器,它的目标是达到一个可控制的吞吐量=运行代码时间/(运行代码时间+垃圾收集时间)
Serial Old收集器:
Serial收集器老年代版
Parallel Old收集器:
Parallel Scavenge 老年代版本
CMS收集器:
全称:Concurrent(并行) Mark(标记) Sweep(清理),是以最短停顿时间为目标的收集器 注:收集器在垃圾回收的时候会暂停所有工作的线程,这里的最短停顿时间就是暂停线程的时间。
G1收集器:
待补充。。。
说了这么理论知识不如直接来点儿实在的,下面贴出我的tomcat JVM调优参数并对参数做出介绍:
此配置仅是测试,非正式环境配置,请自行根据项目情况进行配置
JAVA_OPTS="-Xms1024m -Xmx1024m -Xmn384m -Xss256k -XX:MaxGCPauseMillis=100 -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0
-Djava.awt.headless=true"
各项参数介绍:
-[b]Xmx1024m:设置JVM最大可用内存为1024M。
-Xms1024m:设置JVM促使内存为1024m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmn384m:设置年轻代大小为384m。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-Xss256k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。[/b]
-XX:MaxGCPauseMillis=100:每次年轻代垃圾回收的最长时间(最大暂停时间)单位是毫秒
-XX:+UseConcMarkSweepGC:设置年老代为并发收集。
-XX:CMSInitiatingOccupancyFraction=80: 使用cms作为垃圾回收使用80%后开始CMS收集
-XX:+UseCMSCompactAtFullCollection:打开对年老代的压缩。可能会影响性能,但是可以消除碎片
-XX:CMSFullGCsBeforeCompaction=0:由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此值设置运行多少次GC以后对内存空间进行压缩、整理。
GC日志查看
对应的参数列表-XX:+PrintGC 输出GC日志 -XX:+PrintGCDetails 输出GC的详细日志 -XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式) -XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800) -XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息 -Xloggc:../logs/gc.log 日志文件的输出路径
相关文章推荐
- java-模拟tomcat服务器
- i-jetty环境搭配与编译
- 实现单Tomcat多Server配置
- 生产环境下的Tomcat配置
- Linux部署Tomcat服务器
- Java 6 JVM参数选项大全(中文版)
- jenkins------结合maven将svn项目自动部署到tomcat下
- 如何搞定tomcat这只喵~
- tomcat在opensuse下开机自启失败的原因分析及解决方法
- 深入解析JVM对dll文件和对类的装载过程
- jsp项目中更改tomcat的默认index.jsp访问路径的方法
- Tomcat 多端口 多应用
- tomcat 5.0 + apache 2.0 完全安装步骤详解
- Tomcat安全设置 win2003 下tomcat权限限制
- Jsp和PHP共用80端口整合Apache和Tomcat(访问时无需加端口号)
- Tomcat服务器 安全设置第1/3页
- tomcat 6.0.20在一个机器上安装多个服务的方法
- Tomcat 5.5 数据库连接池配置
- Tomcat内存溢出分析及解决方法