`

Tomcat调优——JVM优化

阅读更多
Tomcat本身还是运行在JVM上的,通过对JVM参数的调整我们可以使Tomcat拥有更好的性能。针对JVM的优化目前主要在两个方面:

1.内存调优
内存方式的设置是在catalina.sh中,调整一下JAVA_OPTS变量即可,因为后面的启动参数会把JAVA_OPTS作为JVM的启动参数来处理。

具体设置如下:
JAVA_OPTS="$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4"

其各项参数如下:
-Xmx3550m:设置JVM最大可用内存为3550M。
-Xms3550m:设置JVM促使内存为3550m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmn2g:设置年轻代大小为2G。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。

-XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5
-XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6
-XX:MaxPermSize=16m:设置持久代大小为16m。
-XX:MaxTenuringThreshold=0:设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。


2.垃圾回收策略调优
垃圾回收的设置也是在catalina.sh中,调整JAVA_OPTS变量。
具体设置如下:
JAVA_OPTS="$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k -XX:+UseParallelGC  -XX:MaxGCPauseMillis=100"
具体的垃圾回收策略及相应策略的各项参数如下:

串行收集器(JDK1.5以前主要的回收方式)
-XX:+UseSerialGC:设置串行收集器

并行收集器(吞吐量优先)
示例:
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC  -XX:MaxGCPauseMillis=100

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

并发收集器(响应时间优先)
示例:java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC
-XX:+UseConcMarkSweepGC:设置年老代为并发收集。测试中配置这个以后,-XX:NewRatio=4的配置失效了,原因不明。所以,此时年轻代大小最好用-Xmn设置。
-XX:+UseParNewGC: 设置年轻代为并行收集。可与CMS收集同时使用。JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值。
-XX:CMSFullGCsBeforeCompaction:由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此值设置运行多少次GC以后对内存空间进行压缩、整理。
-XX:+UseCMSCompactAtFullCollection:打开对年老代的压缩。可能会影响性能,但是可以消除碎片

3.小结
在内存设置中需要做一下权衡
1)内存越大,一般情况下处理的效率也越高,但同时在做垃圾回收的时候所需要的时间也就越长,在这段时间内的处理效率是必然要受影响的。
2)在大多数的网络文章中都推荐 Xmx和Xms设置为一致,说是避免频繁的回收,这个在测试的时候没有看到明显的效果,内存的占用情况基本都是锯齿状的效果,所以这个还要根据实际情况来定。
分享到:
评论

相关推荐

    Tomcat优化-Tomcat 的性能调优的原理和方法

    ### Tomcat优化——Tomcat 的性能调优的原理和方法 #### 一、概述 Tomcat作为一款广泛使用的开源Web服务器容器,其性能直接影响到基于它的应用程序的表现。本文旨在介绍Tomcat性能调优的基本原理与具体实施方法,...

    JVM调优工具分享

    本文将详细介绍两款常用的JVM调优工具——JConsole和VisualVM。 首先,JConsole是Java 5及更高版本JDK自带的一款监控和管理控制台。它基于JMX(Java Management Extensions),提供了图形用户界面来监控JVM中的内存...

    weblogicTomcatWebsphere调优方法

    本文主要介绍了三个流行的Java应用服务器——WebLogic、Tomcat和WebSphere的调优方法,特别是WebLogic的参数调整。调优是提高应用程序性能的关键步骤,通过调整服务器配置,可以实现更高效的资源利用。 首先,搭建...

    Java性能调优 6步实现项目性能全面升级+面试高频性能问题讲解.rar

    分享课程——【完整版15章】...性能优化的N种企业级解决方案,囊括了【数据库优化】、【Tomcat优化】、【JVM优化】、【垃圾回收】、【Netty优化】、【Nginx优化】、【性能优化高频面试集锦】6大专题+1项面试调优复盘。

    tomcat7.0性能优化-挑战极限精简版

    《Tomcat7.0性能优化——挑战极限精简版》 Tomcat作为一款广泛应用的开源Java Servlet容器,其性能优化是许多开发者关注的重点。本文将深入探讨如何对Tomcat7.0进行性能优化,旨在帮助你挑战其运行效率的极限。 一...

    企业级Tomcat部署实践及安全调优1

    1.1.1 JDK——Tomcat的好帮手 JDK(Java Development Kit)是Java编程语言的核心组成部分,它包含了运行Java程序所需的JVM(Java Virtual Machine)和Java系统类库,还提供了一系列开发工具,如: - `javac`:Java...

    Tomcat 配置与优化方案详解

    除了server.xml的配置,还有其他一些常见的优化手段,例如对JVM进行调优、设置合适的JVM参数来优化内存分配;关闭Web应用的日志记录功能以减少磁盘I/O;增加JVM内存,提高Tomcat处理请求的能力等。 优化Tomcat是一...

    tomcat的linux的7 8 9版本汇总

    10. 监控与性能调优:使用JMX(Java Management Extensions)监控Tomcat,调整JVM参数以优化性能。 总结起来,这个压缩包提供了一个全面的Tomcat版本集合,适合在Linux环境中部署Java Web应用。每个版本都有其特定...

    JAVA性能测试与调优案例

    - **JVM.dll版本的选择**:JVM.dll有两个主要版本——client和server。其中,client版本适用于桌面应用程序,其特点是启动速度快;而server版本则适用于服务器应用程序,虽然启动时间较长,但在运行过程中能够提供更...

    TOMCAT权威指南第二版.pdf百度网盘下载地址

    - **内存调优**:合理设置JVM参数,提高系统性能。 - **线程池配置**:通过调整线程池大小等参数提升并发处理能力。 - **连接器优化**:例如启用HTTP/2协议、调整连接超时时间等。 #### 3.4 安全性增强 - **认证...

    apache-tomcat-8.0.53-windows-x64和tomcat 6.0版本

    7. **性能优化**: Tomcat 8.0.53相比6.0有诸多性能提升,例如NIO(非阻塞I/O)连接器提供了更高的并发性能,JVM调优选项也更加丰富。此外,通过调整配置文件,如server.xml,可以进一步优化Tomcat的内存使用、线程池...

    Tomcat 6.0

    - **JVM调优**:通过调整JVM堆大小、垃圾回收策略等,优化Tomcat的内存使用。 6. **安全实践** - **限制访问权限**:配置防火墙规则,仅允许必要的IP访问Tomcat服务器。 - **使用HTTPS**:为提高数据传输安全性...

    Tomcat与Java.Web开发技术详解附书光盘1

    6. **Tomcat性能调优**:包括设置JVM参数以优化内存分配、调整线程池大小、配置连接器以优化网络通信等,以提高Tomcat处理请求的能力和效率。 7. **安全性**:Tomcat支持多种安全机制,如SSL/TLS加密通信、基本认证...

    apache-tomcat-8.0.zip

    - 使用JVM的内存调优,合理设置`JAVA_OPTS`,如`-Xms`和`-Xmx`。 6. **日志管理**: - 默认日志位于`logs`目录下,可自定义日志级别和配置文件位置。 - `logging.properties`文件可以调整日志框架的配置。 7. *...

    apache-tomcat-6.0.18.zip

    9. **性能调优**: 根据实际需求,可以调整Tomcat的配置参数,如最大线程数、内存分配、JVM堆大小等,以达到最佳性能。 总结来说,"apache-tomcat-6.0.18.zip"提供了一个方便的Java Web应用服务器,它支持Servlet和...

    Tomcat发布文档

    此外,Tomcat还支持最新的Java EE标准之一——Java Servlet 3.0,这使得开发者可以更加轻松地创建基于Web的应用程序。 **知识点2:Tomcat安装与配置** 安装Tomcat通常包括以下几个步骤: 1. **下载与安装**:访问...

    apache-tomcat-10.0.0-M7-windows-x64.zip

    - 使用JVM的内存调优参数,例如通过`setenv.bat`脚本设置`JAVA_OPTS`,以优化Tomcat的内存使用。 8. **监控与管理**: - Tomcat内置了管理Web应用,如`manager`和`host-manager`,通过配置文件启用后,可以远程...

    java资料夹

    该文件可能会详细讲解如何通过修改`setenv.sh`或`setenv.bat`脚本来调整Tomcat的JVM启动参数,如-Xms和-Xmx,以控制Tomcat启动时的最小和最大内存分配,防止因内存不足导致的系统崩溃或性能下降。 接着,我们看到了...

    Tomcat给我的java.lang.OutOfMemoryError: PermGen

    本文将针对两种常见的Java内存溢出错误——`java.lang.OutOfMemoryError: PermGen space`和`java.lang.OutOfMemoryError: Java heap space`进行详细的分析和解决方案的探讨。 首先,我们来看`java.lang....

    服务器资源

    - **JVM调优**:合理设置JVM内存大小,使用适当的垃圾回收策略,可以避免性能瓶颈。 - **日志优化**:减少日志输出,或使用异步日志框架,可以减轻服务器负担。 6. **安全设置** - **用户访问控制**:配置`conf/...

Global site tag (gtag.js) - Google Analytics