• Tomcat


    Tomcat介绍:

    Tomcat:是一个开源的web应用服务器,区别于nginx,nginx只要处理静态页面,那么动态链接数据库时(动态页面)

    并不是nginx处理的优势,动态的请求会交给tomcat进行处理

    Nginx---转发动态请求---tomcat

    Tomcat:

    1. 处理动态页面(HTTP请求)
    2. 处理后端请求(调用数据库服务器)
    3. 易部署:tomcat会自动识别配置文件,自动部署运行
    4. 轻量级的服务软件,处理中小架构的网站可以满足,大型的交互需求,tomcat就非长项了
    5. python node.js 溶器化来处理在容器化部署的项目架构中是不使用tomcat的,都是jar包直接运行,包括k8s,

    tomcat的核心组件

    1、web容器: 完成web功能 处理请求也是nginx转发的http(s)请求,处理动态页面(Java代理编译的页面)处理后端的请求(转发到数据库的请求。)

    2、servlet容器:名字叫catalina 是整个tomcat处理的底层逻辑。处理web请求的动态页面,也处理后端请求(数据库)

    3、jsp容器:jsp会把动态翻译成serlvet的代码。用编译后的规则,显示代码的静态页面。

    动态页面和静态页面:

    静态页面: html

    动态页面: php inex.php

    Jsp Index.jsp  ---- java格式写成的代码,靠jsp翻译,servlet执行编译后的代码,最后展示结果

    servlet容器和JPS:

    Servlet容器:用于开发web应用程序的关键组件

    处理http请求:生成动态内容与客户端之间的交互,前端交互,后端数据库服务器交互,和redis缓存交互

    类:Java当中,调用各种方法,开启人员自定义

    处理http请求

    生成动态页面

    绘画管理:处理用户会话,跟踪用户在不同的请求之间的状态,server可以在用户访问不同也页面时,保存用户的状态信息,例如:购物车同步,用户信息同步

    JPS:Java server pages 动态网页的开发技术,使用jsp的标签在HTML的网页中插入JAVA代码

    <%开头

    >%结尾

    实现Java web应用程序的访问界面,用户界面,或者访问数据库,生成页面内容

    Tomcat核心功能


    功能有两个块组成:接受和响应外部请求的连接器connector

    负责处理请求的container

    Engine:引擎,管理多个虚拟主机,一个tomcat里面只有能一个engine

    Host:代表站点,也就是虚拟主机,一个engine可以有多个host

    Contest:一个context执行一个web应用

    Wrapper:最底层,处理和编译代码,运行结果

    示例图:

    搭建tomcat

    前提:关闭防火墙和安全机制

    配置一下系统环境

    简单介绍Java的一些组件:

    JDK:开发工具包,开发Java的应用程序,jdk包括:编译器,调试器,等等以及Java的类库,开发者用来创建,编译,运行Java程序的重要组件

    JVM:java的虚拟机负责编译后的Java字节码编程本地的机器码,运行Java的代码。

    Jvm:内存管理,垃圾回收机制,线程管理

    Bin:存放启动或者关闭的tomcat的脚本文件,startup.sh shoutdow.th

    Conf:存放的是配置文件,server.xml就是主配置文件

    Webapps:应用部署目录,tomcat默认的web应用部署目录

    Work:tomcat的工作目录,存放JSP编译之后产生的class文件,清缓存会用到

    启动tomcat,记得要检查端口,端口起才是真的起

    tomcat配置虚拟主机:

    1. 配置工作目录
    2. 在公司会运行多个项目,一台部署tomcat太多会浪费资源,所以会配置多个主机,通过不同域名访问不同的内容

    回到conf主配置文件

    160行添加

    解析添加内容:

    www.kgc.com

    www.benet.com

    Host name="www.kgc.com指定站点 (虚拟主机的域名)

    appBase="webapps”站点的工作目录在webapps 存放web应用的目录

    unpackWARs="true"启动webapps,对war包进行展开

    autoDeploy="true”防止在默认应用目录的程序文件,自动进行部罢

    xmIValidation="false” #是否验证XML文件执行的有效性标志

    xmINamespaceAware="false” #是否启动xml命令空间。

    docBase="/usr/local/tomcat/webapps/kgc”:web应用程序的具体部署位置,也就是context所属的host的具体的工作目录

    Path:为空。默认就是webapps

    reloadable="true":允许重新加载context相关的web应用类程序

    Nginx的虚拟主机是一样的

    做映射

    重启,先shutdown.sh

    检查一下端口

    进入虚拟机访问

    总结一下流程:

    1. 请求到连接器:连接到端口是8080,连接器接受请求
    2. www.kgc.com 引擎管理虚拟主机---host---www.kgc.com----context---访问www.kgc.com该主机的工作目录---webapps/kgc----ibdex.jsp---wrapper---servlet来解析index.jsp内容
    3. 响应内容返回到客户端。

    Tomcat的优化:

    默认配置并不适合生产环境,频繁的出现假死

    需要通过压力测试不断优化,提高稳定性

    1. 配置文件优化
    2. Jvm优化
    3. 操作系统优化(内核优化)

    1. 配置文件优化 vim conf server.xml

    记得重启服务和查看端口

    常见的优化:

    maxThread=200

    tomcat使用线程来处理接受的每个请求,可以创建的最大线程数,支持最大并发连接数 200

    minSpareThreads

    最小空闲线程数,tomcat启动时初始化的线程数,表示没人请求,也要打开这些空的线程等待请求10

    maxSpareThreads

    最大备用线程数 创建线程超过这个值,tomcat会关闭不子啊需要的线程,默认是-1(不做限制)

    ConnectTimeout

    网络链接超时,设置为20000毫秒

    EnableLookups=false

    是否方向解析域名,不解析,提高处理效率

    DisableUploadTimeout=true

    上传文件时,是否启用超时限制

    ConnectUploadTime=15000

    上传比下载要耗时,根据需求自定义

    accpetCount=100
    所有的可以使用的线程被占用,可以传入的队伍长度最大值

    Compression=on off forece#所有的情况下都进行压缩压缩之后页面的大小可以减少3/1

    是否对响应的数据进行gzip压缩

    noCompressionUserAgents=gozilla chrom

    对指定访问的浏览器不进行压缩

    回到主配置文件区:

    关闭再开启服务,注意查看端口

    2.jvm优化

    JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -Xmn768m -XX:ParallelGCThreads=2 -XX:ParallelGCThreads=2 -XX:PermSaxPerSize=1024m -Djava.awt.headless=true -XX:+DisableExplicitGC"

    -server:一定要作为第一个参数

    -Xms2048m: java初始化堆的大小,是分配ivm的最小内存。cpu性能高,可以值再设高一点

    Xmx2048m:最大java堆的大小,是分vm的最大内存,取决于物理内存有多大,建议-xms和xmx的值,设置成一样,推荐是你物理的内存的一般。

    目的:Java的垃圾回收机制清理完堆区后,不需要重新分隔计算堆区的大小

    -Xmn768m :新生代内存的大小。官方推荐整个堆大小的3/8

    新生代:Java中每新建一个新的对象,占用的内存就是新生代

    中生代:对象创建完毕之后,占用的内存就是中生代

    老年代:Java垃圾回收机制进行资源回收之后,中生代剩余的部分,就是老年代

    -XX:PermSize=1024m:设置非堆内存的初始值,持久代内存的大小,一般设置为物理内存的1/4.

    -XX:MaxPermSize=1024m:最大非堆内存的大小,持久代内存的最大值,一般设置成物理内存的1/4.

    Djava.awt.headless=true:避免在Linux环境下,web不能展示图片

    -XX:+DisableExplicitGC:禁止调用system.gz(),误调用了gcf方法,会导致整个jvm的响应速度降低

    堆的意思:存储新创建的对象

    非堆:存储编译之后的代码或者是压缩后的类或者是类的元数据

    如何配置:

    记得重启和查看端口

    查看一下

    ajp-nio-8009

    连接器当中的一种类型:ajp 协议的名称就叫ajp.nio:异步非阻塞通信

    8009是AJP协议的监听端口

    APJ:tomcat服务器和前端web服务器(APACHE)进行连接

    提供负载均衡和高效的请求转发,提高并发的处理能力

    HTTP-nio-8080

    用于处理http协议的网络请求

    端口:8080

    3.内核优化

  • 相关阅读:
    Linux常用操作命令大全
    汽车OTA
    Spring Boot 整合邮件服务
    RabbitMQ工作队列
    算法刷题2(C++)链表遍历算法
    这8种保证线程安全的技术你都知道吗?
    底层逻辑-理解Go语言的本质
    C++之STL中vector模拟实现
    一星级挑战:14 数字加密
    【计算机网络实验】BGP配置实验
  • 原文地址:https://blog.csdn.net/wutong0824/article/details/133999630