分布式架构 Tomcat优化

分布式架构 Tomcat优化


Tomcat 模式策略
tomcat

Tomcat优化简介

1.Tomcat默认配置已优化过,主要根据业务场景调整其内存配置,需要JVM基础,本 文不在阐述,合理分配Tomcat内存,优化 Tomcat启动设置catalina.sh中的 JAVA_OPTS,常见参数如下

  • -server :启动JDK的Server版 -Xms:虚拟机初始化最小内存
    -Xmx:虚拟机可使用最大内存(建议物理内存80%)
    -Xmn:新生代内存,一般设置为Xmx的3、4分之一
    -XX:PermSize:持久带初始值
    -XX:MaxPermSize:持久带最大内存(默认32M)
    -XX:MaxNewSize:新生代最大内存(默认16M)
    -Xss1024k 设置线程大小
    -XX:+HeapDumpOnOutOfMemoryError ,系统发生内存溢出,生产dump文件
    -XX:-OmitStackTraceInFastThrow 强制要求JVM始终抛出含堆栈的异常
    -XX:-+DisableExplicitGC 禁止system.gc
    -XX:SurvivorRatio Eden区域和Survivor区域占比,如等于8,8:1:1

参数说明:

  • 正常情况设置-Xms、-Xmx相等避免每次GC后调整堆大小,因默认空余堆内存小于40%时,JVM会增大堆直到-Xmx的最大限制,空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制
  • 查看堆内存是否生效,jmap -heap tomcat进程号

2.Tomcat本身配置优化,server.xml中配置端口 配置

  • 1.maxConnections 最大连接数,对于BIO模式默认等于maxThreads,对于NIO模式默认10000,对于APR/native 默认是8192
  • 2.maxThreads 最大线程数,即同时处理任务个数,默认是200
  • 3.acceptCount 当处理任务线程数达到最大时,接收队列请求个数,默认是100
  • 4.maxQueueSize: 最大的等待队列数,超过则拒绝请求
  • 5.maxHttpHeaderSize:默认4K,http请求响应的Header的最大限制,(Nginx/F5由于Http头部小而导致出现400问题)
  • 6.maxPostSize:设置由容器解析的URL参数的最大长度,-1(小于0)为禁用这个属性,默认为2097152(2M),0是不限制。nginx-设置client_max_body_size,0不限制,Jetty–》200K
  • 7.compression:启用gzip压缩
  • 8.noCompressionUserAgents:排除浏览器
  • 9.compressionMinSize:超过这个大小进行压缩,默认2048(2k)
  • 10.compressableMimeType:需要压缩的response类型,根据情况设置
  • 11.URIEncoding :Tomcat在解析参数的时候(UTF-8)去解码,默认ISO-8859-1
  • 12.connectionTimeout 网络连接超时,单位毫秒,设置-1永不超时

3. 单台Tomcat优化到瓶颈后,搭建Tomcat集群,组合提供外界服务

优化说明:

可参考官网 https://tomcat.apache.org/tomcat-8.0-doc/config/http.html#NIO2_specific_configuration

  • 如果要加大并发连接数,应该同时增大maxThreads和acceptCount,建议设置一样
  • WebServer允许最大连接数还受限于操作系统内核参数,通过 ulimit -a 查看(open files默认1024)
  • protocol 有三种模式BIO/NIO/APR,参考顶部上图
    BIO 最稳定最老一种连接器,采同步阻塞方式,每个线程绑定每个http请求,直到http请求响应返回,如果http客户端请求是keep-alive
    连接一直保持直到到达timeout超时,期间不能用于其它请求处理。综合性能较低
    NIO是java的同步非阻塞I/O技术
    NIO2是java-jdk1.7以后推出异步非阻塞I/O技术
    APR是是C语言编写的非阻塞I/O,需要安装apr和native,安装启动后支持,大幅度可以提高性能
    安装如下
    http://apr.apache.org/download.cgi下载
    进入cd apr-1.5.0/
    ./configura --prefix=/usr/local/apr
    make、make install
    安装apr-iconv
    进入cd apr-iconv-1.5.3/
    ./configura --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr
    make、make install
    安装apr-util
    进入cd apr-util-1.5.3/
    ./configura --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-iconv=/usr/local/apr-iconv/bin/apriconv
    make、make install
    安装tomcat-native,tomcat-bin下自带
    tar zxvf tomcat.native.tar.gz
    cd tomcat-native-1.1.29-src/jni/native
    ./configura --with-apr=/usr/local/apr
    make、make install
    安装完毕后设置apr环境变量
    进入tomcat-bin,打开catalina.sh 在文件的#!/bin/sh添加内容,不会破坏tomcat其它环境配置,如下:
    LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib export LD_LIBRARY_PATH
    设置protocol 为apr模式后启动tomcat,可以查看日志
    init Load APR based Apache Tomcat Native…

笔者本地通过3种模式多次测试,结果如下
./ab -n1000 -c100 http://localhost:8080/demo/query
BRO / NIO / NIO2 /APR
400 450 570 600

扩充Tomcat集群知识
多个Tomcat之间组合一起,协同完成工作,要做集群面临http session等问题,如何在多个Tomcat都有效?
tc1

tc2

  • 使用Tomcat自带cluster方式,多个tomcat之间实时复制session信息,优点:配置简单,缺点:并发情况效率低
    利用前端代理服务器某些策略,比如Nginx基于IP的HASH路由策略,保证相同IP从始至终路由到同一个Tomcat上,优点:配置简单,缺点: 容易造成热点访问,存在单点风险。
    多个同个局域网公网IP发起请求可能都会访问到TC1,一旦TC1挂掉,Session数据会丢失

  • Tomcat的session集中管理,存储到公有缓存中如:redis,前端利用Nginx做负载均衡,优点:系统可以进行水平扩展,同时可保证较高的性能,目前比较成熟 spring-session运用此原理

笔者推荐使用第二种,稳定性能高

总结:

Tomcat优化,分为两方面,jvm参数调优、Tomcat运行模式及参数调优。针对不同系统调整相关参数后需要进行压力测试,找到稳定峰值平衡点。
笔者建议 优化顺序
1.优化单台
2.单台瓶颈后,搭建集群多台提供外界服务

作者简介:张程 技术研究

更多文章请关注微信公众号:zachary分解狮 (frankly0423)

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章