Tomcat8优化

1. 优化内核及TCP连接

fs.file-max = 655350  # 系统文件描述符总量
net.ipv4.ip_local_port_range = 1024 65535  # 打开端口范围
net.ipv4.tcp_max_tw_buckets = 2000  # 设置tcp连接时TIME_WAIT个数
net.ipv4.tcp_tw_recycle = 1  # 快速回收处于TIME_WAIT状态的socket(针对Server端而言) 生成环境中不要改变
net.ipv4.tcp_tw_reuse = 1  # 开启TIME_WAIT重用 允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭
net.ipv4.tcp_syncookies = 1  # 开启SYN cookies 当出现syn等待溢出,启用cookies来处理,可防范少量的syn攻击
net.ipv4.tcp_syn_retries = 2  # 对于一个新建的tcp连接,内核要发送几个SYN连接请求才决定放弃
net.ipv4.tcp_synack_retries = 2  # 这里是三次握手的第二次连接,服务器端发送syn+ack响应 这里决定内核发送次数
net.ipv4.tcp_keepalive_time = 1200  # tcp的长连接,这里注意:tcp的长连接与HTTP的长连接不同
net.ipv4.tcp_fin_timeout = 15    # 设置保持在FIN_WAIT_2状态的时间
net.ipv4.tcp_max_syn_backlog = 20000  # syn队列的长度 默认1024
net.core.somaxconn = 65535  # 在内核内存中netfilter可以同时处理的“任务”
net.core.netdev_max_backlog = 65535  # 当网络接口比内核处理数据包速度快时,允许送到队列数据包的最大数目

保存退出
[root@cloud ~]# sysctl -p   # 添加生效

FIN_WAIT_1: 这个状态要好好解释一下,其实FIN_WAIT_1和FIN_WAIT_2状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别 是:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即 进入到FIN_WAIT_1状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2状态

四次握手描述的是客户段主动关闭,服务器被动关闭的流程,其一般过程如下:

客户端发送FIN报文段,进入FIN_WAIT_1状态。
服务器端收到FIN报文段,发送ACK表示确认,进入CLOSE_WAIT状态。
客户端收到FIN的确认报文段,进入FIN_WAIT_2状态。
服务器端发送FIN报文端,进入LAST_ACK状态。
客户端收到FIN报文端,发送FIN的ACK,同时进入TIME_WAIT状态,启动TIME_WAIT定时器,超时时间设为2MSL。
服务器端收到FIN的ACK,进入CLOSED状态。
客户端在k时间内没收到对端的任何响应,TIME_WAIT超时,进入CLOSED状态。

2. 修改Tomcat Connector运行模式为apr

Tomcat Connector有三种运行模式:

  • bio:阻塞IO bio是三种运行模式中性能最低第一种。
  • nio:是一个基于缓冲区,并能提供非阻塞I/O操作的JAVA API 因此NIO也成为非阻塞I/O,比bio拥有更好的并发性能。
  • apr:调用httpd核心链接库来读取或文件传输,从而提高tomat对静态文件的处理性能。Tomcat APR模式也是Tomcat在高并发下的首选运行模式:
    1  yum -y install gcc gcc-c++ pcre-devel
    2  tar -zxf apr-1.7.0.tar.gz 
    3  cd apr-1.7.0/
    4  ./configure --prefix=/usr/local/apr && make -j4 && make install
    5  cd ..
    6  tar -zxf apr-util-1.6.1.tar.gz 
    7  cd apr-util-1.6.1/
    8  ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make -j4 && make install
    9  cd ..
   10  rm -rf apr-util-1.6.1
   11  yum -y install expat-devel
   12  tar -zxf apr-util-1.6.1.tar.gz 
   13  cd apr-util-1.6.1/
   14  ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make -j4 && make install
   15  cd /usr/local/tomcat/bin/
   16  tar -zxf tomcat-native.tar.gz -C /usr/src
   17  cd /usr/src/tomcat-native-1.2.18-src/
   18  cd native/
   19  ./configure --prefix=/usr/local/apr --with-java-home=/usr/local/java 
   20  make -j4 && make install
   22  vim /etc/profile  尾部添加
       export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
   23  source /etc/profile
   24  /usr/local/tomcat/bin/startup.sh 

[root@localhost ~]# vim /usr/local/tomcat/conf/server.xml 
 69     <Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
 70                connectionTimeout="20000"
 71                redirectPort="8443" />
116     <Connector port="8009" protocol="org.apache.coyote.http11.Http11AprProtocol" redirectPort="8443"     />

[root@localhost ~]# tail /usr/local/tomcat/logs/catalina.out 
2-Jul-2019 22:40:38.276 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/manager]
12-Jul-2019 22:40:38.378 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/manager] has finished in [102] ms
12-Jul-2019 22:40:38.397 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8080"]
12-Jul-2019 22:40:38.411 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8009"]
12-Jul-2019 22:40:38.416 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 1392 ms

3. 内存优化

Tomcat内存优化主要是对tomcat启动参数优化,可以修改catalina.sh中设置

[root@localhost ~]# vim /usr/local/tomcat/bin/catalina.sh 
CATALINA_OPTS="-server -Xms256m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=128m"
# ----- Execute The Requested Command   #找到此行 在上边添加


-server:一定要作为第一个参数,在多个CPU时性能佳
-Xms:使用的最小内存,cpu性能高时此值应设的大一些
-Xmx:j使用的最大内存
上面两个值是分配JVM的最小和最大内存,取决于硬件物理内存的大小,建议均设为物理内存的一半。
-XX:PermSize:设定内存的永久保存区域
-XX:MaxPermSize:设定最大内存的永久保存区域

4. tomcat并发优化

参数说明

minProcessors:最小连接线程数,用于提高系统处理性能,默认值为 10
maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为 75
acceptCount:允许的最大连接数,应大于等于 maxProcessors ,默认值为 100
connectionTimeout:网络连接超时,单位:毫秒。设置为 0 表示永不超时,这样设置有隐患的。通常可设置为 30000 毫秒。
其中和最大连接数相关的参数为maxProcessors 和 acceptCount 。如果要加大并发连接数,应同时加大这两个参数。
web server允许的最大连接数还受制于操作系统的内核参数设置,通常 Windows 是 2000 个左右, Linux 是 1000 个左右。 

maxThreads     最大并发数
minSpareThreads    最小空闲线程数
maxSpareThreads   T最大空闲线程数
enableLookups      若设为true, 则支持域名解析,可把 ip 地址解析为主机名
redirectPort        在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口
acceptAccount       监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads  )
URIEncoding    URL统一编码

配置如下

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000" #默认有的
               maxThreads="1000"
               minProcessors="100"
               maxProcessors="1000"
               minSpareThreads="100"
               maxSpareThreads="1000"
               enableLookups="false"
               URIEncoding="utf-8"
               acceptCount="1000"
               disableUploadTimeout="ture"
               redirectPort="8443" /> #默认有的
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值