zoukankan      html  css  js  c++  java
  • tomcat

    Java体系

    • Java编程语言
    • Java类文件:java类文件为java编译后的文件
    • JavaAPI:java类文件库
    • JavaVM(JVM)
      • class loader:编译和类库文件加载器
      • 执行引擎

    JRE(Java Runtime Enviroment):

    是Java的运行环境。面向Java程序的使用者,而不是开发者。如果你仅下载并安装了JRE,那么你的系统只能运行Java程序。JRE是运行Java程序所必须环境的集合,包含JVM标准实现及 Java核心类库。它包括Java虚拟机、Java平台核心类和支持文件。它不包含开发工具(编译器、调试器等)。

    JDK(Java Development Kit):

    又称J2SDK(Java2 Software Development Kit),是Java开发工具包,它提供了Java的开发环境(提供了编译器javac等工具,用于将java文件编译为class文件)和运行环境(提 供了JVM和Runtime辅助包,用于解析class文件使其得到运行)。如果你下载并安装了JDK,那么你不仅可以开发Java程序,也同时拥有了运 行Java程序的平台。JDK是整个Java的核心,包括了Java运行环境(JRE),一堆Java工具tools.jar和Java标准类库 (rt.jar)。

    运行jsp的web容器

    jsp技术将java代码嵌入html文件中,建立了一种动态网页的编写标准,它的技术基础是serverlet技术,当用户请求一个jsp文件时,jsp会将代码转换成serverlet(即标准的java代码),java代码再交由低层的jdk执行。常见的容器有websphere,weblogic,tomcat。

     

    tomcat简介

    Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
    Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
    诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。目前Tomcat最新版本为10.0。

    tomcat就是中间件之一,tomcat本身是一个容器,专门用来运行java程序,java语言开发的网页.jsp就应该运行于tomcat中。而tomcat本身的运行也依赖于jdk环境。

    tomcat应用场景:lnmt

    tomcat部署

    tomcat官网: http://tomcat.apache.org/

    Tomcat目录结构

    目录含义
    conf/ tomcat配置文件
    .. server.xml 主配置文件
    .. web.xml 补充额外功能
    .. tomcat-user.xml tomcat管理端配置文件 用户名 密码
    logs 日志
    .. catalina.out tomcat最全日志 查看error startup时间
    .. catalina.data.log catalina.out切割日志
    .. localhost_access_log_data.txt tomcat访问日志
    webapps tomcat站点目录

     

    配置jdk

    [root@localhost ~]# tar -xzvf jdk-8u281-linux-x64.tar.gz  -C /usr/local/
    
    [root@localhost ~]# vim /etc/profile
    .......................
    .....................
    export JAVA_HOME=/usr/local/jdk1.8.0_281/
    export JRE_HOME=/usr/local/jdk1.8.0_281/jre
    export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
    export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
    export TOMCAT8080_HOME=/usr/local/tomcat
    

     解压缩tomcat

    [root@loclhost ~]# tar -zxvf apache-tomcat-8.5.65.tar.gz  -C /usr/local/
    
    [root@localhost ~]# ln -s /usr/local/apache-tomcat-8.5.65    /usr/local/tomcat
    

     放行端口

    firewall-cmd  --zone=public --add-port=8080/tcp --permanent
     
    firewall-cmd  --reload
    

    写一个hello world的java测试页面 

    [root@localhost ~]# mkdir /usr/local/tomcat/webapps/test
    [root@localhost ~]# vim /usr/local/tomcat/webapps/test/index.jsp
    <html>
    <head>
            <title>test page</title>
    </head>
    <body>
            <%
                out.println("Hello World");
            %>
    </body>
    </html>
    

      启动服务

    [root@localhost tomcat]# /usr/local/tomcat/bin/startup.sh
    

    测试访问

    [root@localhost ~] curl 192.168.248.40:8080/test/
    hello world
    

    Tomcat管理端

    • 搭建与测试的时候开启管理端 开启管理端
    • 生产环境 关闭管理端

    开启管理端

    # 8.0这样配置就完成了 
    # 8.5之后管理跟严格了
    # 要配置tomcat-user.xml之外
    # 还限制只能再本地使访问管理
    [root@localhost ~]# cd /usr/local/tomcat/
    [root@localhost tomcat]# vim conf/tomcat-users.xml
    ..............
    .............
      <role rolename="manager-gui"/>
      <role rolename="admin-gui"/>
      <user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>
    .................
    

     

     解除本地限制

    [root@localhost tomcat]# find -type f -name "*.xml" | xargs  grep '127'
    ./webapps/host-manager/META-INF/context.xml:         allow="127.d+.d+.d+|::1|0:0:0:0:0:0:0:1" />
    ./webapps/host-manager/WEB-INF/manager.xml:         allow="127.d+.d+.d+|::1|0:0:0:0:0:0:0:1" />
    ./webapps/manager/META-INF/context.xml:         allow="127.d+.d+.d+|::1|0:0:0:0:0:0:0:1" />
    
    [root@localhost tomcat]# sed -i.bak 's#127#\d+#g' ./webapps/host-manager/META-INF/context.xml ./webapps/manager/META-INF/context.xml
    
    [root@localhost tomcat]# /usr/local/tomcat/bin/shutdown.sh
    
    [root@localhost tomcat]# /usr/local/tomcat/bin/startup.sh
    

     

    tomcat 多实例

    在一台服务器上运行多个tomcat

    注意事项: 端口与路径不同

    root@localhost ~]# tar xf apache-tomcat-8.5.65.tar.gz
    [root@localhost ~]# cp -r  apache-tomcat-8.5.65 /usr/local/tomcat8081
    [root@localhost ~]# cp -r  apache-tomcat-8.5.65 /usr/local/tomcat8082
    
    [root@localhost ~]# cd /usr/local/
    [root@localhost local]# sed -i.bak 's#8080#8081#g' tomcat8081/conf/server.xml 
    [root@localhost local]# sed -i.bak 's#8005#8006#g' tomcat8081/conf/server.xml
    [root@localhost local]# sed -i.bak 's#8009#8010#g' tomcat8081/conf/server.xml
    
    [root@localhost local]# sed -i.bak 's#8080#8082#g' tomcat8082/conf/server.xml
    [root@localhost local]# sed -i.bak 's#8005#8007#g' tomcat8082/conf/server.xml 
    [root@localhost local]# sed -i.bak 's#8009#8011#g' tomcat8082/conf/server.xml
    
    #启动服务
    [root@localhost local]# tomcat8081/bin/startup.sh
    [root@localhost local]# tomcat8082/bin/startup.sh 
    
    #检测是否启动
    [root@localhost local]# ss -lntup| grep java
    tcp    LISTEN     0      1        [::ffff:127.0.0.1]:8005               [::]:*                   users:(("java",pid=2193,fd=69))
    tcp    LISTEN     0      1        [::ffff:127.0.0.1]:8006               [::]:*                   users:(("java",pid=12271,fd=69))
    tcp    LISTEN     0      1        [::ffff:127.0.0.1]:8007               [::]:*                   users:(("java",pid=12311,fd=69))
    tcp    LISTEN     0      100    [::]:8080               [::]:*                   users:(("java",pid=2193,fd=55))
    tcp    LISTEN     0      100    [::]:8081               [::]:*                   users:(("java",pid=12271,fd=55))
    tcp    LISTEN     0      100    [::]:8082               [::]:*                   users:(("java",pid=12311,fd=55))
    
    #防火墙放行
    [root@localhost local]# firewall-cmd  --zone=public --add-port=8081/tcp --permanent
    [root@localhost local]# firewall-cmd  --zone=public --add-port=8082/tcp --permanent
    [root@localhost local]# firewall-cmd  --reload
    
    #网页访问
    

    tomcat 3种工作模式

    模式header 2  
    bio blocking io tomcat 7及之前使用,同步模型、阻塞 一个线程处理一个进程,缺点:并发高式,线程数较多,浪费资源
    nio now ip tomcat 8及以后,异步非阻塞 nio1(默认的) nio2可以通过少量的线程处理大量的请求
    apr Apache Portable Rutime   tomcat对静态文件的处理性能。 tomcat apr在tomcat上运行高并发应用的首选

    bio(blocking I/O),阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包),对于每一个请求都要创建一个线程来进行处理,所以开销较大不适合处理高并发的场景。

    nio基于缓冲区、并能提供非阻塞I/O操作的Java API实现,比传统的I/O处理方式(bio)有更高的并发运行性能

    apr(Apache Portable Runtime/Apache可移植运行库)是Apache HTTP服务器的支持库。从操作系统级别解决异步I/O问题,大幅度提高服务器的并发处理性能,也是Tomcat生产环境运行的首选方式。要tomcat支持apr,必须安装apr和native,这样tomcat才可以利用apache的apr接口,使用操作系统的部分本地操作,从而提升性能。

     

    nio2模式

    #配置server.xml文件  
      <Connector port="8081" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
                   connectionTimeout="20000"
                   redirectPort="8443" />
    
    #apr模式需要一些插件
    [root@localhost tomcat8081]# yum -y install apr apr-devel tomcat-native
    
    #修改server.xml文件
        <Connector port="8081" protocol="org.apache.coyote.http11.Http11AprProtocol"
                   connectionTimeout="20000"
                   redirectPort="8443" />
    
    
    #centos8中 yum源中没有tomcat-native 需要编译安装,默认在下载的tomcat里的bin目录带的有该项目的tar包 
    

    开启tomcat远程监控

    #修改 tomcat/bin/catalina.sh
    
    #CATALINA_OPTS java内置变量 修改Java启动参数(tomcat)
    
    CATALINA_OPTS   #java启动参数 
    
    CATALINA_OPTS="$CATALINA_OPTS
    -Dcom.sun.mam=nagement.jmxremote  #开启tomcat远程监控功能
    -Dcom.sun.mam=nagement.jmxremote.port=12345  #指定端口 ,还会生产两个随机端口
    -Dcom.sun.mam=nagement.jmxremote.authenticate=false   #是否开启认证
    -Dcom.sun.mam=nagement.jmxremote.ssl=false  #是否开启https
    -Djava.rmi.server.hostname=192.168.248.20" #服务器IP,生产环境使用内网
    
    [root@localhost tomcat]# sed -n "2p" bin/catalina.sh 
    CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote   -Dcom.sun.management.jmxremote.port=1111   -Dcom.sun.management.jmxremote.authenticate=false  -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.248.40
    
    #重启服务
    

    Tomcat优化

    安全优化

    server.xml文件

    降权启动(强制)

    # 在普通用户下运行和维护tomcat,降权启动/监牢模式
    [root@localhost tomcat]# useradd tomcat
    [root@localhost tomcat]# chown  -R tomcat.tomcat /usr/local/tomcat
    [root@localhost local]# su - tomcat
    [tomcat@localhost ~]$ /usr/local/tomcat/bin/startup.sh 
    Using CATALINA_BASE:   /usr/local/tomcat
    Using CATALINA_HOME:   /usr/local/tomcat
    Using CATALINA_TMPDIR: /usr/local/tomcat/temp
    Using JRE_HOME:        /usr/local/jdk1.8.0_281/jre
    Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
    Using CATALINA_OPTS:    -Dcom.sun.management.jmxremote   -Dcom.sun.management.jmxremote.port=1111   -Dcom.sun.management.jmxremote.authenticate=false  -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.248.40
    Tomcat started.
    [tomcat@localhost ~]$ ss -lntup|grep java
    tcp    LISTEN     0      50     [::]:1111               [::]:*                   users:(("java",pid=2040,fd=21))
    tcp    LISTEN     0      50     [::]:41783              [::]:*                   users:(("java",pid=2040,fd=20))
    tcp    LISTEN     0      50     [::]:35996              [::]:*                   users:(("java",pid=2040,fd=22))
    tcp    LISTEN     0      100    [::]:8080               [::]:*                   users:(("java",pid=2040,fd=59
    
    #通过普通用户自启
    vim /etc/rc.local
    su - 用户 -c "/usr/local/tomcat/bin/startup.sh"
    

     注意事项 1-1024之间是特权端口,只能root使用

    文件列表访问控制(强制),默认展示站点目录下所有内容

    nginx  网站文件列表功能 autoindex on:
    tomcat  关闭
    conf/web.xml文件中
    ..........................
            <init-param>
                <param-name>listings</param-name>
                <param-value>false</param-value>
            </init-param>
    ............................
    

    版本信息隐藏

    #第一种
    cd /usr/local/tomcat/lib
    unzip catalina.jar
    vim  org/apache/catalina/util/ServerInfo.properties
    server.info=Apache Tomcat
    server.number=0.0.0.0
    server.built=Nov 7 2018 10:05:27 UTC
    
    jar uvf catalina.jar  org/apache/catalina/util/ServerInfo.properties
    cd /usr/local/tomcat/lib/
    
    #第二种,添加报错页面
    vim conf/web.xml
        <error-page>
        <error-code>403</error-code>
        <location>/403.jsp</location>
        </error-page>
        <error-page>
        <error-code>404</error-code>
        <location>/404.jsp</location>
        </error-page>
        <error-page>
        <error-code>500</error-code>
        <location>/500.jsp</location>
        </error-page>
    

    Server header重写

    conf/server.xml
        <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   server="nginx/1.26.1" #添加此行
                   redirectPort="8443" />
    

    日志访问格式

    #User-Agent 用户的浏览器 客户端
    #Referer  从什么地方跳转过来
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                   prefix="localhost_access_log" suffix=".txt"
                   pattern="%h %l %u  %t %s %b %{Referer}i %{User-Agent}i %D" />
    

    tomcat性能优化

    • 调优 参数数值调整方式:
      • 参考值(基准) 不设置数值,通过压力参数软件,看看tomcat性能
      • 增加优化参数,通用压力测试软件
    压力测试工具 
    ab/webbench http压力测试
    stress 压力测试 cpu 内存 swap.....
    jmeter 压力测试java(tomcat)
    dd/fio 测试磁盘性能
    mysqlslap 压力测试数据库(mysql)
    loadrunner 专业测试工具

    优化参数

    maxThreads="500" #最大的线程数量 
    acceptCount=""   #当达到最大线程数量的时候 列队长度,一版和maxThreads一致
    acceptorThreadCount="2" #分为几对,一般与cpu核心一致默认是1
    minSoareTherads="10"  #空闲时候最小进程
    enableLookups="false" #禁止DNS逆向处理,route -n/apr -n
    compression="true" #开启tomcat压缩功能,一般是静态资源
    compressionMinSize="2048" #压缩文件最小是2048个字节
    compressableMimeType="text/html,text/plain,/text/css,application/javascript,application/json,application/x-font-tty,application/x-font-otf"  #压缩那些类型的文件
    disableUploadTimeout="true" #上传文件的超时时间
    redirectPort="8443"
    
    
    maxTherads: 
        如果操作是纯粹的计算,那么影响系统响应时间的主要限制就是cpu的运算能力,此时maxThreads应该 尽量设小,降低同一时间争抢cpu的线程个数。
        如果是操作是纯粹的IO或数据库,那么响应时间的主要限制就变为等待外部资源,此时maxThreads应该尽量设置大,这样才能提高同时处理多个请求的个数
    

    java启动参数优化

    # catalina.sh文件中添加
    # 设置 jvm初始内存大小和jvm最大内存大小
    
    # -Xms jvm初始内存
    # -Xmx jvm最大内存
    # 一般 -Xmx是-Xms的两倍
    # gc 定期清理jvm内存
    #-Xlog  执行gc的日志
    JAVA_OPTS='-Xms1024m -Xmx1024m -Xloggc:/var/log/tomcat.gc.log'
    
  • 相关阅读:
    织梦后台如何生成站点地图sitemap.xml
    滚轮滚动一定距离触发导航顶部固定,且所点击的关键词,背景字体变色
    超简单横向选项卡
    后台域名重定向301
    JS检测是否是360浏览器
    《深入理解Java虚拟机》-----第2章 Java内存区域与内存溢出异常
    java基础(十七)----- 浅谈Java中的深拷贝和浅拷贝 —— 面试必问
    java基础(十六)----- equals()与hashCode()方法详解 —— 面试必问
    java基础(十五)----- Java 最全异常详解 ——Java高级开发必须懂的
    java基础(十四)-----详解匿名内部类——Java高级开发必须懂的
  • 原文地址:https://www.cnblogs.com/diqiyao/p/14752993.html
Copyright © 2011-2022 走看看