Tomcat Connector的三种不同的运行模式性能相差很大,有人测试过的结果如下:
这三种模式的不同之处如下:
· BIO:
一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。
Tomcat7或以下,在Linux系统中默认使用这种方式。
· NIO:
利用Java的异步IO处理,可以通过少量的线程处理大量的请求。
Tomcat8在Linux系统中默认使用这种方式。
Tomcat7必须修改Connector配置来启动:
<connector>
connectionTimeout="20000"redirectPort="8443"/>
· APR:
即Apache Portable Runtime,从操作系统层面解决io阻塞问题。
Tomcat7或Tomcat8在Win7或以上的系统中启动默认使用这种方式。
Linux如果安装了apr和native,Tomcat直接启动就支持apr。
查看当前tomcat使用的协议:
[root@wcr_caf-master logs]# grep "StartingProtocolHandler" catalina.out
11-Jun-2019 15:11:37.766 INFO[main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler["http-nio-8080"]
11-Jun-2019 15:11:37.776 INFO[main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler["ajp-nio-8009"]
[root@wcr_caf-master logs]#
配置tomcat:==========================start=============================
[root@tomcat1 conf]# vim server.xml
<server>
1.禁用tomcat的AJP协议 注释掉
2.修改通讯模式BIO修改为NIO提高并发处理能力
<connectorport>
connectionTimeout="20000"
executor="tomcatThreadPool"
redirectPort="8443"
minProcessors="2000"
maxProcessors="4000"
maxHttpHeaderSize="8192"
maxThreads="4000"
minSpareThreads="1000"
maxSpareThreads="2000"
acceptCount="4000"
disableUploadTimeout="true"
URIEncoding="UTF-8"
enableLookups="false"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png"
/>
3.启用:
<executor>
===================配置end=============================================
#参数说明:
org.apache.coyote.http11.Http11NioProtocol:调整工作模式为Nio
maxThreads:最大线程数,默认150。增大值避免队列请求过多,导致响应缓慢。
minSpareThreads:最小空闲线程数。
maxSpareThreads:最大空闲线程数,如果超过这个值,会关闭无用的线程。
acceptCount:当处理请求超过此值时,将后来请求放到队列中等待。
disableUploadTimeout:禁用上传超时时间
connectionTimeout:连接超时,单位毫秒,0代表不限制
URIEncoding:URI地址编码使用UTF-8
enableLookups:关闭dns解析,提高响应时间
compression:启用压缩功能
compressionMinSize:最小压缩大小,单位Byte
compressableMimeType:压缩的文件类型
---------------------------------------------------------------------------------
#grep "StartingProtocolHandler" catalina.out
[root@wcr_caf-master logs]# pwd
/usr/local/tomcat/logs
[root@wcr_caf-master logs]# grep "StartingProtocolHandler" catalina.out
11-Jun-2019 16:45:05.970 INFO[main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler["http-nio-8080"]
[root@wcr_caf-master logs]#
获取tomcat进程pid
ps -ef|grep tomcat
统计该tomcat进程内的线程个数
ps -Lf 29295 |wc -l
[root@wcr_caf-master conf]# ps -Lf `ps-ef|grep tomcat|grep -v grep|awk -F ' ' '{print $2}'`|wc -l
1103
[root@wcr_caf-master conf]#
4.JVM调优生产配置
[root@tomcat1 ~]# vim /usr/local/tomcat8/bin/catalina.sh
# OS specific support. $var _must_ be set to either true or false.下面添加
JAVA_OPTS="-server -Xms1024m -Xmx2048m-XX:PermSize=512m-XX:MaxPermSize=512m-XX:+UseParallelGCThreads=8-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=80-XX:+UseCMSCompactAtFullCollection
-XX:CMSFullGCsBeforeCompaction=0 -XX:-PrintGC-XX:-PrintGCDetails
-XX:-PrintGCTimeStamps"
--------------------我的------------------------------------------------
JAVA_OPTS="-server -Xms4g -Xmx8g -XX:PermSize=512M -XX:MaxNewSize=1024m -XX:MaxPermSize=1024m "
-----------------------------------------------
参数
描述
-Xms
堆内存初始大小,单位m、g
-Xmx
堆内存最大允许大小,一般不要大于物理内存的80%
-XX:PermSize
非堆内存初始大小,一般应用设置初始化200m,最大1024m就够了
-XX:MaxPermSize
非堆内存最大允许大小
-XX:+UseParallelGCThreads=8
并行收集器线程数,同时有多少个线程进行垃圾回收,一般与CPU数量相等
-XX:+UseParallelOldGC
指定老年代为并行收集
-XX:+UseConcMarkSweepGC
CMS收集器(并发收集器)
-XX:+UseCMSCompactAtFullCollection
开启内存空间压缩和整理,防止过多内存碎片
生效了。
/<connectorport>/<connector>閱讀更多 信息安全攻與防 的文章