`

java性能优化之服务器(tomcat)优化

阅读更多
Tomcat启动行参数的优化
Tomcat 的启动参数位于tomcat的安装目录\bin目录下,如果你是Linux操作系统就是catalina.sh文件,如果你是Windows操作系统那么你需要改动的就是catalina.bat文件。打开该文件,一般该文件头部是一堆的由##包裹着的注释文字,找到注释文字的最后一段如:
Linux系统中tomcat的启动参数
export JAVA_OPTS="-server -Xms1400M -Xmx1400M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=128M -XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC  -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m  -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true "

Windows系统中tomcat的启动参数
set JAVA_OPTS=-server -Xms1400M -Xmx1400M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=128M -XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC  -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m  -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true

参数解释:
–Xmn
设置年轻代大小为512m。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-Xss
是指设定每个线程的堆栈大小。这个就要依据你的程序,看一个线程 大约需要占用多少内存,可能会有多少线程同时运行等。一般不易设置超过1M,要不然容易出现out ofmemory。
-XX:+AggressiveOpts
作用如其名(aggressive),启用这个参数,则每当JDK版本升级时,你的JVM都会使用最新加入的优化技术(如果有的话)
-XX:+UseBiasedLocking
启用一个优化了的线程锁,我们知道在我们的appserver,每个http请求就是一个线程,有的请求短有的请求长,就会有请求排队的现象,甚至还会出现线程阻塞,这个优化了的线程锁使得你的appserver内对线程处理自动进行最优调配。
-XX:PermSize=128M-XX:MaxPermSize=256M
JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;
在数据量的很大的文件导出时,一定要把这两个值设置上,否则会出现内存溢出的错误。
由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。
那么,如果是物理内存4GB,那么64分之一就是64MB,这就是PermSize默认值,也就是永生代内存初始大小;
四分之一是1024MB,这就是MaxPermSize默认大小。
-XX:+DisableExplicitGC
在程序代码中不允许显示的调用”System.gc()”。看到过有两个极品工程中每次在DAO操作结束时手动调用System.gc()一下,觉得这样做好像能够解决它们的out ofmemory问题一样,付出的代价就是系统响应时间严重降低,就和我在关于Xms,Xmx里的解释的原理一样,这样去调用GC导致系统的JVM大起大落,性能不到什么地方去哟!
-XX:+UseParNewGC
对年轻代采用多线程并行回收,这样收得快。
  -XX:+UseConcMarkSweepGC
即CMS gc,这一特性只有jdk1.5即后续版本才具有的功能,它使用的是gc估算触发和heap占用触发。
我们知道频频繁的GC会造面JVM的大起大落从而影响到系统的效率,因此使用了CMS GC后可以在GC次数增多的情况下,每次GC的响应时间却很短,比如说使用了CMS GC后经过jprofiler的观察,GC被触发次数非常多,而每次GC耗时仅为几毫秒。
-XX:MaxTenuringThreshold
设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概率。
这个值的设置是根据本地的jprofiler监控后得到的一个理想的值,不能一概而论原搬照抄。
-XX:+CMSParallelRemarkEnabled
在使用UseParNewGC 的情况下, 尽量减少 mark 的时间
-XX:+UseCMSCompactAtFullCollection
在使用concurrent gc 的情况下, 防止 memoryfragmention, 对live object 进行整理, 使 memory 碎片减少。
-XX:LargePageSizeInBytes
指定 Java heap的分页页面大小
-XX:+UseFastAccessorMethods
get,set 方法转成本地代码
-XX:+UseCMSInitiatingOccupancyOnly
指示只在 oldgeneration 在使用了初始化的比例后concurrent collector 启动收集
-XX:CMSInitiatingOccupancyFraction=70
CMSInitiatingOccupancyFraction,这个参数设置有很大技巧,基本上满足(Xmx-Xmn)*(100- CMSInitiatingOccupancyFraction)/100>=Xmn就不会出现promotion failed。在我的应用中Xmx是6000,Xmn是512,那么Xmx-Xmn是5488兆,也就是年老代有5488 兆,CMSInitiatingOccupancyFraction=90说明年老代到90%满的时候开始执行对年老代的并发垃圾回收(CMS),这时还 剩10%的空间是5488*10%=548兆,所以即使Xmn(也就是年轻代共512兆)里所有对象都搬到年老代里,548兆的空间也足够了,所以只要满 足上面的公式,就不会出现垃圾回收时的promotion failed;
因此这个参数的设置必须与Xmn关联在一起。
  -Djava.awt.headless=true
这个参数一般我们都是放在最后使用的,这全参数的作用是这样的,有时我们会在我们的J2EE工程中使用一些图表工具如:jfreechart,用于在web网页输出GIF/JPG等流,在winodws环境下,一般我们的app server在输出图形时不会碰到什么问题,但是在linux/unix环境下经常会碰到一个exception导致你在winodws开发环境下图片显示的好好可是在linux/unix下却显示不出来,因此加上这个参数以免避这样的情况出现。
上述这样的配置,基本上可以达到:
系统响应时间增快
JVM回收速度增快同时又不影响系统的响应率
JVM内存最大化利用
  线程阻塞情况最小化
Tomcat容器内的优化
前面我们对Tomcat启动时的命令进行了优化,增加了系统的JVM可使用数、垃圾回收效率与线程阻塞情况、增加了系统响应效率等还有一个很重要的指标,我们没有去做优化,就是吞吐量。
还记得我们在第天的学习中说的,这个系统本身可以处理1000,你没有优化和配置导致它默认只能处理25。因此下面我们来看Tomcat容器内的优化。
打开tomcat安装目录\conf\server.xml文件,定位到这一行:
<Connector port="8080" protocol="HTTP/1.1"

这一行就是我们的tomcat容器性能参数设置的地方,它一般都会有一个默认值,这些默认值是远远不够我们的使用的,我们来看经过更改后的这一段的配置:
<Connector port="8080" protocol="HTTP/1.1"
          URIEncoding="UTF-8"  minSpareThreads="25" maxSpareThreads="75"
          enableLookups="false" disableUploadTimeout="true" connectionTimeout="20000"
          acceptCount="300"  maxThreads="300" maxProcessors="1000" minProcessors="5"
          useURIValidationHack="false"
                                               compression="on" compressionMinSize="2048"
                                               compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
               redirectPort="8443"
/>

参数解释:
  URIEncoding=”UTF-8”
使得tomcat可以解析含有中文名的文件的url,真方便,不像apache里还有搞个mod_encoding,还要手工编译
maxSpareThreads
maxSpareThreads 的意思就是如果空闲状态的线程数多于设置的数目,则将这些线程中止,减少这个池中的线程总数。
minSpareThreads
最小备用线程数,tomcat启动时的初始化的线程数。
enableLookups
这个功效和Apache中的HostnameLookups一样,设为关闭。
connectionTimeout
connectionTimeout为网络连接超时时间毫秒数。
maxThreads
maxThreads Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数,即最大并发数。

   acceptCount
acceptCount是当线程数达到maxThreads后,后续请求会被放入一个等待队列,这个acceptCount是这个队列的大小,如果这个队列也满了,就直接refuse connection

maxProcessors与minProcessors
在 Java中线程是程序运行时的路径,是在一个程序中与其它控制线程无关的、能够独立运行的代码段。它们共享相同的地址空间。多线程帮助程序员写出CPU最 大利用率的高效程序,使空闲时间保持最低,从而接受更多的请求。
通常Windows是1000个左右,Linux是2000个左右。
  useURIValidationHack
我们来看一下tomcat中的一段源码:
security
        if (connector.getUseURIValidationHack()) {
            String uri = validate(request.getRequestURI());
            if (uri == null) {
                res.setStatus(400);
                res.setMessage("Invalid URI");
                throw new IOException("Invalid URI");
            } else {
                req.requestURI().setString(uri);
                // Redoing the URI decoding
                req.decodedURI().duplicate(req.requestURI());
                req.getURLDecoder().convert(req.decodedURI(), true);
            }
        }

可以看到如果把useURIValidationHack设成"false",可以减少它对一些url的不必要的检查从而减省开销。
enableLookups="false"
为了消除DNS查询对性能的影响我们可以关闭DNS查询,方式是修改server.xml文件中的enableLookups参数值。
disableUploadTimeout
类似于Apache中的keeyalive一样
给Tomcat配置gzip压缩(HTTP压缩)功能
compression="on" compressionMinSize="2048"             
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"

HTTP 压缩可以大大提高浏览网站的速度,它的原理是,在客户端请求网页后,从服务器端将网页文件压缩,再下载到客户端,由客户端的浏览器负责解压缩并浏览。相对于普通的浏览过程HTML,CSS,Javascript , Text ,它可以节省40%左右的流量。更为重要的是,它可以对动态生成的,包括CGI、PHP , JSP , ASP , Servlet,SHTML等输出的网页也能进行压缩,压缩效率惊人。
1)compression="on" 打开压缩功能
2)compressionMinSize="2048" 启用压缩的输出内容大小,这里面默认为2KB
3)noCompressionUserAgents="gozilla, traviata" 对于以下的浏览器,不启用压缩
4)compressableMimeType="text/html,text/xml" 压缩类型

以上是tomcat的基本优化,如有不对之处希望指出。
分享到:
评论

相关推荐

    Tomcat性能优化

    【标题】:“Tomcat性能优化”意味着我们正在探讨如何提升Apache Tomcat服务器的运行效率,使其在处理Web应用时能够更快、更稳定地工作。Tomcat是一个开源的Java Servlet容器,广泛用于部署Java Web应用程序。 ...

    Tomcat7性能优化

    #### 三、Tomcat优化配置详解 ##### 3.1 配置Tomcat管理员账户 为了更好地管理和监控Tomcat服务器,首先需要设置管理员账户。在`conf/tomcat-users.xml`文件中添加用户角色,如下所示: ```xml ...

    tomcat性能优化.pdf

    它的性能优化是提升Java应用响应速度、处理能力的重要途径。在进行Tomcat优化时,需要从多个维度入手,包括但不限于配置优化、部署与测试、参数调整、源码理解以及JVM参数调整等。 配置优化是Tomcat性能优化的第一...

    Java应用服务器 Tomcat

    7. **性能优化**:Tomcat可以通过调整配置参数,如线程池大小、内存分配、连接超时等,来优化服务器性能。 在使用Tomcat时,开发者需要注意以下几点: 1. **环境配置**:确保安装了Java Development Kit (JDK),并...

    Tomcat性能优化.rar

    在Java Web开发领域,Tomcat作为一款广泛应用的开源Servlet容器,其性能优化对于提升整个Web应用的响应速度和处理能力至关重要。本篇文章将全面解析Tomcat性能优化的各个方面,帮助开发者们理解并掌握优化技巧,提升...

    tomcat性能优化,调优

    Tomcat性能优化是指通过调整Tomcat服务器的配置和虚拟机参数,以提高Tomcat服务器的性能和可扩展性。Tomcat服务器的性能优化可以分为两类:外部环境调优和自身调优。 外部环境调优是指调整Tomcat运行环境的操作系统...

    Tomcat性能优化及JVM内存工作原理

    Tomcat性能优化是指通过调整Tomcat服务器的配置和JVM的参数,以提高Tomcat服务器的性能和响应速度。Tomcat性能优化主要包括代码层优化、JVM内存优化和应用配置优化三方面。 代码层优化是指通过优化Java代码,减少...

    tomcat性能优化

    Tomcat性能优化是一项关键的任务,尤其对于承载大型应用的服务器来说。优化主要包括两大部分:外部环境调整和Tomcat自身的调整。首先,我们来探讨一下外部环境的优化,特别是JAVA虚拟机性能优化和操作系统性能优化。...

    优化java及tomcat

    Tomcat作为一款流行的开源Java应用服务器,其性能优化主要集中在调整连接器(Connector)的配置上。文档指出,可以通过调整线程池参数来提高处理请求的速度: 1. **maxThreads**:定义了Tomcat能够创建的最大线程数...

    优化提高tomcat性能.Tomcat参数调优

    `Tomcat性能优化,学会薪水翻倍-jmeter测试java -jar --设置参数运行的程序.url`提供了更多关于如何使用JMeter进行性能测试的资源。 通过上述方法,我们可以针对不同场景对Tomcat进行调优,提升其处理请求的能力,...

    web服务器tomcat6.0

    2. **性能优化**:Tomcat 6.0在处理请求和响应方面进行了许多性能优化,使其能够快速处理高并发访问,适合于中大型Web应用。 3. **内存管理和线程池**:Tomcat 6.0提供了更有效的内存管理机制和线程池配置选项,有...

    Java 服务器软件apache-tomcat.zip

    还需要熟悉部署流程、日志管理、安全性设置以及性能优化等知识。同时,了解如何使用Tomcat的内置管理工具进行应用的部署、更新和移除,对于日常开发和维护工作至关重要。 总之,Apache Tomcat作为Java Web开发中的...

    Tomcat7 性能优化

    ### Tomcat7 性能优化详解 #### 一、引言 随着互联网应用的日益增长,网站并发访问的需求越来越高,而作为一款广泛使用的开源Web容器,Apache Tomcat 的性能优化显得尤为重要。本文将针对Tomcat7进行一系列的性能...

    redis集群jvm调优实战MySQL5.6性能优化&Tomcat7优化.rar

    本资料集围绕四个核心主题展开:Redis集群、JVM调优、MySQL 5.6性能优化和Tomcat 7的优化,旨在帮助开发者和运维人员更好地理解和实践这些关键领域的优化策略。 首先,Redis是一个高性能的键值存储系统,常用于缓存...

    tomcat7 优化 性能调优

    在现代Web应用开发中,Apache Tomcat因其轻量级、灵活且易于部署的特点成为开发者们的首选应用服务器之一。然而,在面对高并发访问场景时,如何有效地优化Tomcat以提高其性能变得至关重要。本文将围绕“Tomcat7优化...

    web服务器tomcat7.0

    标题"web服务器tomcat7.0"指的是Apache Tomcat,一个流行的开源Web服务器,专用于运行Java Servlet和JavaServer Pages(JSP)技术。这里特指的是Tomcat的7.0版本。 描述中提到的"tomcat 使用jsp开发web的web服务器...

    Tomcat性能优化.pdf

    1. **JAVA虚拟机性能优化** - **内存设置**:合理设置JVM的最大堆内存(`-Xmx`)、最小堆内存(`-Xms`),避免频繁的垃圾回收导致的性能下降。 - **垃圾回收策略**:选择合适的垃圾回收算法(如CMS、G1等),减少...

    TOMCAT架构服务器优化指南

    《TOMCAT架构服务器优化指南》是一本深入探讨TOMCAT服务器优化的专业书籍,由刘光瑞撰写,并由人民邮电出版社出版。该书聚焦于如何提升TOMCAT服务器的性能,确保系统的稳定性和高效运行。TOMCAT作为一款广泛应用的...

Global site tag (gtag.js) - Google Analytics