Tomcat 优化

简介

Tomcat 请求处理流程

Tomcat 容器启动后,当有一个请求A进入时Tomcat会创建一个业务线程A去处理A的请求,当有一个请求B进入时会创建业务线程B处理请求。如果处理完成时业务线程就会回收。当请求太多的时候就会连接异常;所以优化第一个思路就是添加更多的业务线程,第二个是优化请求队列;

1. 线程池优化

线程池优化

参数参数作用建议优化
maxConnections最大连接数建议是系统允许的最大连接数
maxThreads最大线程数优化default 200,建议在500-700之间
acceptCount最大排队等待数建议和最大线程数相同或者略低都可以
  1. maxConnections - 最大连接数
    maxConnections 会受系统影响;Linux 可以通过ulimit -a 查看连接数(open files 就是系统最大连接数); 我们可以修改系统允许的最大连接数(etc/security/limits.conf 修改最大连接数);
soft nofiles 65535
hard nofiles 65535
  1. 添加maxConntions 的配置
    2.1 如果CPU计算要求过高时,建议不需要配置过大(大数据spark)
    2.2 如果CPU要求不是特别高时,建议配置(64G内存32核CPU)3000左右,配置后要做压力测试

  2. 配置地方(conf/server.xml)

<Connector 	port="80" 
			maxConntions="2000"  
			connectionTimeout="20000"  
			protocol="HTTP/1.1" 
			redirectPort="8443" 
			URIEncoding="UTF-8"/>
  1. maxThreads 最大线程数优化
    默认值是200,建议500-700之间
<Connector 	port="80"
			maxConntions="2000" 
			maxThreads="500"
			connectionTimeout="20000"  
			protocol="HTTP/1.1" 
			redirectPort="8443" 
			URIEncoding="UTF-8"/>
  1. acceptCount 最大排队等待数
    一个Tomcat 处理能力 = 最大线程数 + 最大排队等待数;
    一般建议和最大线程数相同或者略低都可以
<Connector 	port="80"
			maxConntions="2000" 
			maxThreads="500"
			acceptCount="500"
			connectionTimeout="20000"  
			protocol="HTTP/1.1" 
			redirectPort="8443" 
			URIEncoding="UTF-8"/>

2. Tomcat 内存优化

JVM 优化建议

参数参数作用优化建议
-server启用Server服务器端建议开启
-Xms最小内存建议与-Xmx相同
-Xmx最大内存建议到可用内存的80%
-XX:MetaspaceSize元空间初始值建议和物理内存一致,也可以不用配置
-XX:MaxMetaspaceSize元空间最大内存默认无限
-XX:MaxNewSize新生代最大内存默认16M

注意: MetaspaceSize,MaxMetaspaceSize 只有1.8 以上才有;
JVM 在bin/catalina.sh/bat 下

CATALINA_OPTS="-server -Xms1024m -Xms1024m -XX:MetaspaceSize=1024m -XX:MaxMetaspaceSize=1024m -XX:MaxNewSize=512m"

注意:JAVA_OPTS 建议放在第一行;

可用通过java提供的jmap工具查看配置是否生效

jmap -heap 线程编号

3. 其他优化

Gzip 压缩网络参数,下载文件的时候压缩,保存传输效率更快,有三个重要参数:

  1. compression 是否开启Gzip 压缩;
  2. compressableMimeType 压缩类型;
  3. compressionMinSize 压缩后输出内容大小,默认是2048,2K;

Gzip 配置也是在conf目录下server.xml中的Connertor 中配置

<Connector 	URIEncoding="UTF-8" 
			connectionTimeout="20000" 
			port="80" 
			protocol="HTTP/1.1" 
			redirectPort="8443"
			compression="true"
			compressionMinSize="2048"/>

其他项配置

  1. enableLookups 开启反查域名
  2. connectionTimeout 网络连接超时阀值,默认是
  3. minSpareThreads 最小空闲线程数
<Connector 	URIEncoding="UTF-8" 
			connectionTimeout="20000" 
			port="80" 
			maxThreads="500"
			minSpareThreads="100"
			protocol="HTTP/1.1" 
			redirectPort="8443"
			compression="true"
			compressionMinSize="2048"/>

4. Tomcat 线程三种模式介绍

  1. BIO:最稳定最老的一个连接器,使用阻塞形式处理Request请求(Tomcat 7开始抛弃);
  2. NIO:使用Java的异步IO技术,进行非阻塞形式处理Request请求(Tomcat 8 默认);
  3. APR:原生C语言编写的非阻塞I/O,目前性能最理想。比NIO效率还高;

APR 安装步骤
APR 下载,需要下载APR,apr-util,apr-iconv 三个都需要下载; apr 安装需要依赖expat,expat-devel(yum install -y expat expat-devel)
安装顺序:先依赖包,然后apr,apr-iconv,apr-util;
apr 可以理解是tomcat 基础平台所以需要安装,类似JDK一样。有了JDK才能够开发;

  1. apr 安装
          1.1 解压至安装目录
          1.2 ./configure -prefix=/user/local/apr
          1.3 make
          1.4 make install

  2. apr-iconv 安装
          2.1 解压到安装目录
          2.2 ./configure -prefix=/user/local/apr-iconv --with-apr=/user/local/apr
          2.3 make
          2.4 make install

  3. apr-util 安装
          3.1 解压到安装目录
          3.2 ./configure -prefix=/user/local/apr-util --with-apr=/user/local/apr --with-apr-iconv=/user/local/apr-iconv
          3.3 make
          3.4 make install

  4. Tomcat APR 配置
    进入Tomcat bin目录下解压tomcat-native.tar.gz 进入native目录进行安装,安装指定apr目录,然后make & make install

./configure --with-apr=/user/local/apr
  1. 修改catalina.sh/catalina.bat
    LD_LIBRARY_PATH 指定apr安装路径,这样是apr只在当前tomcat有效,apr安装默认是对所有生效
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/user/local/apr/lib export LD_LIBRARY_PATH
  1. 修改server.xml
    protocol 修改为 Http11AprProtocol
<Connector 	URIEncoding="UTF-8" 
			connectionTimeout="20000" 
			port="80" 
			protocol="org.apache.coyote.http11.Http11AprProtocol" 
			redirectPort="8443"
			compression="true"
			compressionMinSize="2048"/>

4. NIO/APR 压力测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值