zoukankan      html  css  js  c++  java
  • tomcat--知识梳理

    一、前提:电脑需要安装jdk
    二、目录
    1、bin:启动、关闭tomcat的文件
    startup、shutdown为启动停止文件;
    catalina.sh文件为配置文件(配置堆栈信息、日志等)

    2、conf:配置文件
    server.xml 最重要的配置文件(修改连接池、http端口等)

    3、webapps:项目包放置路径
    把war、jar包,放在这个路径下,tomcat启动时会自动解压

    还有另外一种方式,使用java -jar 直接启动
    只有当war包是微服务项目springboot框架时可以直接用java -jar启动
    java -jar **.war|jar --port 自定义端口

    三、修改配置文件
    1、配置tomcat的jvm信息,调整jvm堆栈信息
    编辑bin/catalina.sh文件,搜索JAVA_OPTS
    添加以下代码:
    JAVA_OPTS="-server -Xms512m -Xmx512m -Xss256k -XX:PermSize=128m"
    -server :当前为一个server服务,现在的服务器一般都是多核
    -Xms512m: 初始分配堆大小
    -Xmx512m:最大堆大小
    -Xmn:新生代的大小
    -Xss256k:每个线程栈的大小
    -XX:PermSize=128m:非堆内存大小

    2、JAVA_OPTS参数添加垃圾回收统计、设置并行收集器、设置并发收集器,详见下图


    3、修改tomcat连接池
    编辑conf/server.xml文件


    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
    maxThreads="32" minSpareThreads="4"/>
    <Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    acceptCount=100
    maxConnections=1000
    redirectPort="8443" />
    acceptCount:能接受的队列长度
    maxConnections:最大连接数,配置-1,不限制
    maxThreads:最大线程数,相对与能支持的最大并发用户数
    connectionTimeout :连接超时时长,单位毫秒
    minSpareThreads:tomcat初始化默认时创建的线程数,也是以后线程增加时一次增加的最小数量
    maxSpareThreads:一旦创建的线程数超过这个值,tomcat就会关闭不活动的线程

     图解:maxConnections、maxThreads、acceptCount关系

    我们可以把tomcat比做一个火锅店,流程是取号、入座、叫服务员,可以做一下三个形象的类比:

    1)acceptCount 最大等待数
    可以类比为火锅店的排号处能够容纳排号的最大数量;排号的数量不是无限制的,火锅店的排号到了一定数据量之后,服务往往会说:已经客满。
    (2)maxConnections 最大连接数
    可以类比为火锅店的大堂的餐桌数量,也就是可以就餐的桌数。如果所有的桌子都已经坐满,则表示餐厅已满,已经达到了服务的数量上线,不能再有顾客进入餐厅了。
    (3)maxThreads:最大线程数
    可以类比为厨师的个数。每一个厨师,在同一时刻,只能给一张餐桌炒菜,就像极了JVM中的一条线程。

    整个就餐的流程,大致如下:
    (1)取号:如果maxConnections连接数没有满,就不需要取号,因为还有空余的餐桌,直接被大堂服务员领上餐桌,点菜就餐即可。如果 maxConnections 连接数满了,但是取号人数没有达到 acceptCount,则取号成功。如果取号人数已达到acceptCount,则拿号失败,会得到Tomcat的Connection refused connect 的回复信息。
    (2)上桌:如果有餐桌空出来了,表示maxConnections连接数没有满,排队的人,可以进入大堂上桌就餐。
    (3)就餐:就餐需要厨师炒菜。厨师的数量,比顾客的数量,肯定会少一些。一个厨师一定需要给多张餐桌炒菜,如果就餐的人越多,厨师也会忙不过来。这时候就可以增加厨师,一增加到上限maxThreads的值,如果还是不够,只能是拖慢每一张餐桌的上菜速度,这种情况,就是大家常见的“上一道菜吃光了,下一道菜还没有上”尴尬场景。
    详见截图:

    结论:服务器支持的最大连接数在acceptCount+maxConnections之间,超出这个值后,如果有新的请求进来,就会有超时的错误提示

     四、性能调优

    调优1:做性能测试时,在服务器日志中,查看到 Out of Memory (oom内存溢出的信息)时可以适当的调整jvm堆栈信息,不能超过物理内存的一半

     
    调优2:tomcat连接池不够时,调整线程池大小
    netstat -apo | grep 8080 | grep ESTABLISHED | wc -l         -----查看连接数

     参考链接:https://www.jianshu.com/p/5198359b59f7

  • 相关阅读:
    Java线程的学习(一)——以售票系统为例
    web笔记
    ssm2之applicationContext.xml文件配置
    ssm笔记1
    在ViewHolder中添加item点击事件接口(自定义
    Java反射机制
    新手导航页(小圆点
    jsoup
    TextView设置随机大小和颜色
    常用IO流
  • 原文地址:https://www.cnblogs.com/sgfg-1314/p/14353630.html
Copyright © 2011-2022 走看看