Tomcat连接器协议优化

Tomcat 连接器的三种办法: bio、nio 和 apr,三种办法性能差别很大,apr 的性能最优, bio 的性能最差。
而 Tomcat 7 利用的 Connector 默认就启用的 Apr 协议,但须要系统安装 Apr 库,否则就会利用 bio 办法。

nio如何配置

进入到tomcat的server.xml找到connector。
变动个中的protocol属性即可。

apr如何配置

apr的配置须要安装依赖

jsp优化Tomcat优化年夜全进来看了真就会了 PHP

yum -y install openssl-develyum -y install apr-devel

安装之后,去tomcat官网下载native组件,native可以算作是tomcat和apr交互的中间环节,下载地址是:http://tomcat.apache.org/download-native.cgi 这里下载最新的版本1.2.10解压并安装

tar -xvzf tomcat-native-1.2.10-src.tar.gzcd tomcat-native-1.2.10-src/native/./configure

至此apr安装成功,进入server.xml。
变动协议将默认的protocol="HTTP/1.1"修正为protocol="org.apache.coyote.http11.Http11AprProtocol"。

Tomcat配置文件方面的优化

配置文件方面是我们紧张的tomcat优化的地方。
我们将常见的优化直接在配置文件中放置。

connectionTimeout="30000":网络连接超时,单位:毫秒,设置为 0 表示永不超时,这样设置有隐患的。
常日可设置为 30000 毫秒,可根据检测实际情形,适当修正enableLookups="false":是否反查域名,以返回远程主机的主机名,取值为:true 或 false,如果设置为false,则直接返回IP地址,为了提高处理能力,应设置为 false。
disableUploadTimeout="false":上传时是否利用超机遇制。
connectionUploadTimeout="150000":上传超时时间,毕竟文件上传可能须要花费更多的韶光,这个根据你自己的业务须要自己调,以 使Servlet有较长的韶光来完成它的实行,须要与上一个参数一起合营利用才会生效。
acceptCount="300":指定当所有可以 利用的处理要求的线程数都被利用时,可传入连接要求的最大行列步队长度,超过这个数的要求将不予处理,默认为100个。
keepAliveTimeout="120000":长连接最大保持韶光(毫秒),表示不才次要求过来之前,Tomcat 保持该连接多久,默认是利用 connectionTimeout 韶光,-1 为不限定超时。
maxKeepAliveRequests="1":表示在做事器关闭之前,该连接最大支持的要求数。
超过该要求数的连接也将被关闭,1表示禁用,-1表示不限定个数,默认100个,一样平常设置在100~200之间。
compression="on":是否对相应的数据进行 GZIP 压缩,off:表示禁止压缩;on:表示许可压缩(文本将被压缩)、force:表示所有情形下都进行压缩,默认值为off,压缩数据后可以有效的减少页面的大小,一样平常可以减小1/3旁边,节省带宽。
compressionMinSize="2048":表示压缩相应的最小值,只有当相应报文大小大于这个值的时候才会对报文进行压缩,如果开启了压缩功能,默认值便是2048。
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png":压缩类型,指定对哪些类型的文件进行数据压缩。

<Connector executor="tomcatThreadPool"port="8080" protocol="HTTP/1.1"URIEncoding="UTF-8"connectionTimeout="30000" //网络连接超时,单位:毫秒,设置为 0 表示永不超时,这样设置有隐患的。
常日可设置为 30000 毫秒,可根据检测实际情形,适当修正enableLookups="false"//是否反查域名,以返回远程主机的主机名,取值为:true 或 false,如果设置为false,则直接返回IP地址,为了提高处理能力,应设置为 false。
disableUploadTimeout="false"//上传时是否利用超机遇制。
connectionUploadTimeout="150000"//上传超时时间,毕竟文件上传可能须要花费更多的韶光,这个根据你自己的业务须要自己调,以使Servlet有较长的韶光来完成它的实行,须要与上一个参数一起合营利用才会生效。
acceptCount="300"//指定当所有可以利用的处理要求的线程数都被利用时,可传入连接要求的最大行列步队长度,超过这个数的要求将不予处理,默认为100个。
keepAliveTimeout="120000"//长连接最大保持韶光(毫秒),表示不才次要求过来之前,Tomcat 保持该连接多久,默认是利用 connectionTimeout 韶光,-1 为不限定超时。
maxKeepAliveRequests="1"//表示在做事器关闭之前,该连接最大支持的要求数。
超过该要求数的连接也将被关闭,1表示禁用,-1表示不限定个数,默认100个,一样平常设置在100~200之间。
compression="on"//是否对相应的数据进行 GZIP 压缩,off:表示禁止压缩;on:表示许可压缩(文本将被压缩)、force:表示所有情形下都进行压缩,默认值为off,压缩数据后可以有效的减少页面的大小,一样平常可以减小1/3旁边,节省带宽。
compressionMinSize="2048"//表示压缩相应的最小值,只有当相应报文大小大于这个值的时候才会对报文进行压缩,如果开启了压缩功能,默认值便是2048。
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png"//压缩类型,指定对哪些类型的文件进行数据压缩。
redirectPort="8443" />
Tomcat的jvm方面的优化

找到catalina.sh在文件开头增加如下设置:JAVA_OPTS=’-Xms256m-Xmx512m’

-Xms:表示 Java 初始化堆的大小,-Xms 与-Xmx 设成一样的值,避免 JVM 反复重新申请内存,导致性能大起大落,默认值为物理内存的 1/64,默认(MinHeapFreeRatio参数可以调度)空余堆内存小于 40% 时,JVM 就会增大堆直到 -Xmx 的最大限定。

-Xmx:表示最大 Java 堆大小,当运用程序须要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致运用做事崩溃,因此一样平常建议堆的最大值设置为可用内存的最大值的80%。
如何知道我的 JVM 能够利用最大值,利用 java -Xmx512M -version 命令来进行测试,然后逐渐的增大 512 的值,如果实行正常就表示指定的内存大小可用,否则会打印缺点信息,默认值为物理内存的 1/4,默认(MinHeapFreeRatio参数可以调度)空余堆内存大于 70% 时,JVM 会减少堆直到-Xms 的最小限定。

-Xss:表示每个 Java 线程堆栈大小,JDK 5.0 往后每个线程堆栈大小为 1M,以前每个线程堆栈大小为 256K。
根据运用的线程所需内存大小进行调度,在相同物理内存下,减小这个值能天生更多的线程,但是操作系统对一个进程内的线程数还是有限定的,不能无限天生,履历值在 3000~5000 旁边。
一样平常小的运用, 如果栈不是很深, 该当是128k 够用的,大的运用建议利用 256k 或 512K,一样平常不易设置超过 1M,要不然随意马虎涌现out ofmemory。
这个选项对性能影响比较大,须要严格的测试。

-XX:NewSize:设置新生代内存大小。

-XX:MaxNewSize:设置最大新生代新生代内存大小

-XX:PermSize:设置持久代内存大小

-XX:MaxPermSize:设置最大值持久代内存大小,永久代不属于堆内存,堆内存只包含新生代和老年代。

-XX:+AggressiveOpts:浸染如其名(aggressive),启用这个参数,则每当 JDK 版本升级时,你的 JVM 都会利用最新加入的优化技能(如果有的话)。

-XX:+UseBiasedLocking:启用一个优化了的线程锁,我们知道在我们的appserver,每个http要求便是一个线程,有的要求短有的要求长,就会有要求排队的征象,乃至还会涌现线程壅塞,这个优化了的线程锁使得你的appserver内对线程处理自动进行最优调配。

-XX:+UseConcMarkSweepGC:设置年迈代为并发网络,即 CMS gc,这一特性只有 jdk1.5后续版本才具有的功能,它利用的是 gc 估算触发和 heap 占用触发。
我们知道频频繁的 GC 会造面 JVM的大起大落从而影响到系统的效率,因此利用了 CMS GC 后可以在 GC 次数增多的情形下,每次 GC 的相应韶光却很短,比如说利用了 CMSGC 后经由 jprofiler 的不雅观察,GC 被触发次数非常多,而每次 GC 耗时仅为几毫秒。

-XX:+UseParNewGC:对新生代采取多线程并行回收,这样收得快,把稳最新的 JVM 版本,当利用 -XX:+UseConcMarkSweepGC 时,-XX:UseParNewGC 会自动开启。
因此,如果年轻代的并行 GC 不想开启,可以通过设置 -XX:-UseParNewGC 来关掉。

-XX:MaxTenuringThreshold:设置垃圾最大年事。
如果设置为0的话,则新生代工具不经由 Survivor 区,直接进入老年代。
对付老年代比较多的运用(须要大量常驻内存的运用),可以提高效率。
如果将此值设置为一 个较大值,则新生代工具会在 Survivor 区进行多次复制,这样可以增加工具在新生代的存活韶光,增加在新生代即被回收的概率,减少Full GC的频率,这样做可以在某种程度长进步做事稳定性。
该参数只有在串行 GC 时才有效,这个值的设置是根据本地的 jprofiler 监控后得到的一个空想的值,不能一概而论原搬照抄。

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

-XX:+UseFastAccessorMethods:利用 get,set 方法转成本地代码,原始类型的快速优化。

-Djava.awt.headless=true:这个参数一样平常我们都是放在末了利用的,这全参数的浸染是这样的,有时我们会在我们的 J2EE 工程中利用一些图表工具如:jfreechart,用于在 web 网页输出 GIF/JPG 等流,在 winodws 环境下,一样平常我们的 app server 在输出图形时不会碰到什么问题,但是在linux/unix 环境下常常会碰到一个 exception 导致你在 winodws 开拓环境下图片显示的好好可是在 linux/unix 下却显示不出来,因此加上这个参数以免避这样的情形涌现。

-Xmn:新生代的内存空间大小,把稳:此处的大小是(eden+ 2 survivor space)。
与 jmap -heap 中显示的 New gen 是不同的。
全体堆大小 = 新生代大小 + 须生代大小 + 永久代大小。
在担保堆大小不变的情形下,增大新生代后,将会减小须生代大小。
此值对系统性能影响较大,Sun官方推举配置为全体堆的 3/8。

-XX:NewRatio:年轻代(包括 Eden 和两个 Survivor 区)与年迈代的比值(撤除持久代),-XX:NewRatio=4 表示年轻代与年迈代所占比值为 1:4,年轻代占全体堆栈的 1/5,Xms=Xmx 并且设置了 Xmn 的情形下,该参数不须要进行设置。

-XX:SurvivorRatio:Eden 区与 Survivor 区的大小比值,设置为 8,表示 2 个 Survivor 区(JVM 堆内存年轻代中默认有 2 个大小相等的 Survivor 区)与 1 个 Eden 区的比值为 2:8,即 1 个 Survivor 区占全体年轻代大小的 1/10。

-XX:+UseSerialGC:设置串行网络器。

-XX:+UseParallelGC:设置为并行网络器。
此配置仅对年轻代有效。
即年轻代利用并行网络,而年迈代仍利用串行网络。

-XX:+UseParallelOldGC:配置年迈代垃圾网络办法为并行网络,JDK6.0 开始支持对年迈代并行网络。

-XX:OldSize:设置 JVM 启动分配的老年代内存大小,类似于新生代内存的初始大小 -XX:NewSize。

Tomcat的字符集配置优化

Tomcat 的措辞编码,配置起来很慢,要经由多次设置才可以了,否则中文很有可能涌现乱码情形。
譬如汉字“中”,以 UTF-8 编码后得到的是 3 字节的值 %E4%B8%AD,然后通过 GET 或者 POST 办法把这 3 个字节提交到 Tomcat 容器,如果你不见告 Tomcat 我的参数是用 UTF-8编码的,那么 Tomcat 就认为你是用 ISO-8859-1 来编码的,而 ISO8859-1(兼容 URI 中的标准字符集 US-ASCII)是兼容 ASCII 的单字节编码并且利用了单字节内的所有空间,因此 Tomcat 就以为你通报的用 ISO-8859-1 字符集编码过的 3 个字符,然后它就用 ISO-8859-1 来解码。

设置起来不难利用“ -D<名称>=<值> ”来设置系统属性:

-Djavax.servlet.request.encoding=UTF-8

-Djavax.servlet.response.encoding=UTF-8

-Dfile.encoding=UTF-8

-Duser.country=CN

-Duser.language=zh

总结

Tomcat优化到此结束,你现在懂了吗?文中难免有不敷,欢迎批评示正。