美文网首页Tomcat
综合架构tomcat

综合架构tomcat

作者: 天生顽皮 | 来源:发表于2021-06-18 00:25 被阅读0次

    一.期末架构服务tomcat

    1.jre-jdk-jvm介绍
    jre
    java runtime enviroment java运行环境
    jdk
    java delelopment kit java开发环境(很多内容) = jre + 额外java工具
    jvm
     java virtual machine java虚拟机
    **1份代码 想在不同的系统使用
    **java 程序代码 运行在java虚拟机中 只要系统能有java环境(java虚拟机) 就可以运行代码
    **1份代码 处处使用问题 代码可移植性
    **对于 java虚拟机 一般关注 内存使用情况
    

    二.准备环境与部署

    1.web03
    ##jdk
    #各种版本:
    https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/
    2.部署 jdk
    [root@oldboy-tomcat ~]# tar xf /app/tools/jdk-8u241-linux-x64.tar.gz  -C  /app/
    [root@oldboy-tomcat ~]# ln -s /app/jdk1.8.0_241/       /app/jdk
    3.java jdk 环境变量
    cat >>/etc/profile<<'EOF'
    export JAVA_HOME=/app/jdk
    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
    export
    CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
    export TOMCAT_HOME=/app/tomcat
    EOF
    [root@oldboy-tomcat ~]# . /etc/profile   运行
    4.检查 jdk是否部署完成
    [root@oldboy-tomcat ~]# java -version
    java version "1.8.0_241"
    Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
    Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07,mixed mode)
    5.部署 tomcat
    [root@oldboy-tomcat ~]# tar xf /app/tools/apache�tomcat-8.5.50.tar.gz -C /app/
    [root@oldboy-tomcat ~]# ln -s /app/apache-tomcat�8.5.50/ /app/tomcat
    6.检查jdk+tomcat
    [root@oldboy-tomcat ~]#
    /app/tomcat/bin/version.sh
    Using CATALINA_BASE: /app/tomcat
    Using CATALINA_HOME: /app/tomcat
    Using CATALINA_TMPDIR: /app/tomcat/temp
    Using JRE_HOME: /app/jdk
    太多了不写了
    

    1.tomcat服务管理

    image.png
    启动tomcat
    [root@web01tools]#/application/tomcat/bin/startup.sh
    Using CATALINA_BASE: /application/tomcat
    Using CATALINA_HOME: /application/tomcat
    Using CATALINA_TMPDIR: /application/tomcat/temp
    Using JRE_HOME: /application/jdk
    启动成功提示太多了不写了
    检查端口与服务
    [root@web01 tools]# ss -lntup|grep java
    [root@web01 tools]#ps  -ef  |grep   java
    
    web访问10.0.0.7:8080
    

    2.tomcat目录结构

    image.png

    3.tomcat管理端

    image.png
    *注意:tomcat 8.5 对管理端限制更严格
    *要配置tomcat-user.xml之外
    *还限制 只能在本地使用127.0.0.1 访问管理的
    *从tomcat8.5开始 管理端默认只能通过 本地使用 127.0.0.1 访问 (类似于nginx all 127.0.0.1 ; deny all; )
    *默认情况下,只能从与Tomcat运行在同一台计算机上的浏览器访问管理器。如果要修改此限制,则需要编辑管理器的context.xml文
    件。
    
    3.1查看登陆限制修改
    原文为
    [root@web03 /app/tomcat]# find -type f -name 
    "context.xml" |xargs grep 127
    ./webapps/host-manager/META-INF/context.xml:         
    allow="127\d.\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" />
    ./webapps/host-manager/WEB-INF/manager.xml:         
    allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
    修改为
    [root@web03 /app/tomcat]# find -type f -name 
    "context.xml" |xargs grep allow
    ./webapps/host-manager/META-INF/context.xml:         
    allow="\d+\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
    ./webapps/manager/META-INF/context.xml:         
    allow="\d+\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
    allow="\d+\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1"
    />
    
    3.2修改登陆账号密码conf/tomcat-user.xml
    image.png
    修改为
    [root@web03 ~]# cat  /app/tomcat/conf/tomcat-users.xml |grep  role
      NOTE:  By default, no user is included in the "manager-gui" role required
      NOTE:  The sample user and role entries below are intended for use with the
      <role rolename="admin-gui"/>
      <role rolename="manager-gui"/>
      <role rolename="host-gui"/>
      <user username="oldboy" password="oldboy" roles="admin-gui,manager-gui,host-gui"/>
    
    3.3因为是修改的配置文件所以需要重启
    关闭
    [root@web03 ~]#  # /app/tomcat/bin/shutdown.sh 
    重启
    [root@web03 ~]#  # /app/tomcat/bin/startsh 
    

    3.4提示登陆状态

    image.png
    3.5登录成功显示的信息
    image.png
    image.png
    image.png

    4.tomcat日志与进程信息

    4.1 进程信息
    #ps命令查询 java进程信息
    [root@web03 ~]# ps  -ef  |grep  java
    root      27620      1  0 10:01 ?        00:00:53 /app/jdk/bin/java -Djava.util.logging.config.file=/app/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /app/tomcat/bin/bootstrap.jar:/app/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/app/tomcat -Dcatalina.home=/app/tomcat -Djava.io.tmpdir=/app/tomcat/temp org.apache.catalina.startup.Bootstrap start
    root      28705  27620  0 12:10 ?        00:00:49 /app/jdk1.8.0_60/jre/bin/jav -Xms8m -Xmx32m -Dfile.encoding=UTF-8 -Duser.dir=/app/tomcat/webapps/zrlog/WEB-INF/plugins -jar /app/tomcat/webapps/zrlog/WEB-INF/plugins/plugin-core.jar 21913 41913 /app/tomcat/webapps/zrlog/WEB-INF/db.properties /app/tomcat/webapps/zrlog/WEB-INF/plugins/jars 51913 /app/tomcat/webapps/zrlog 2.1.14
    root      29617  29411  0 15:35 pts/2    00:00:00 grep --color=auto java
     
    jps查看   jps   -lvm 显示最详细的信息  也可分开查看
    *[root@web03 ~]# jps
    28705 plugin-core.jar
    27620 Bootstrap
    29662 Jps
    *[root@web03 ~]# jps  -lvm
    28705 /app/tomcat/webapps/zrlog/WEB-INF/plugins/plugin-core.jar 21913 41913 /app/tomcat/webapps/zrlog/WEB-INF/db.properties /app/tomcat/webapps/zrlog/WEB-INF/plugins/jars 51913 /app/tomcat/webapps/zrlog 2.1.14 -Xms8m -Xmx32m -Dfile.encoding=UTF-8 -Duser.dir=/app/tomcat/webapps/zrlog/WEB-INF/plugins
    29682 sun.tools.jps.Jps -lvm -Denv.class.path=.:/app/jdk/lib:/app/jdk/jre/lib:/app/jdk/lib/tools.jar -Dapplication.home=/app/jdk1.8.0_60 -Xms8m
    27620 org.apache.catalina.startup.Bootstrap start -Djava.util.logging.config.file=/app/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -Dcatalina.base=/app/tomcat -Dcatalina.home=/app/tomcat -Djava.io.tmpdir=/app/tomcat/temp
    
    使用jps   -lvm   |grep   -V   jps
    [root@web03 ~]# jps  -lvm  |grep   jps
    29698 sun.tools.jps.Jps -lvm -Denv.class.path=.:/app/jdk/lib:/app/jdk/jre/lib:/app/jdk/lib/tools.jar -Dapplication.home=/app/jdk1.8.0_60 -Xms8m
    
    
    ## java 高级命令 Troubleshooting Tools
    ##jmap 取出 java进程信息 jvm内存信息 heap memory
    details for a process, core file
    ##导出 信息  jmap  -heap   java_pid (pid就是上面的过滤出来的数字)
    [root@web03 ~]#  jps -lvm |grep -v jps |cut -d" "  -f1
    [root@web03 ~]# jmap  -heap  28705
    会出结果
    
    显示java真实的进程信息
    #jstack    加pid    Java process   显示java进程执行流程 调用信息 Troubleshooting Tools
    
    4.2tomcat日志
    image.png
    catalina.out   日志主要看
    #error 错误
    #startup 或 finished 启动所需的时间
    

    5.tomcat配置文件

    image.png
    #server.xml
    #端口部分
    ###8005 shutdown端口
    22 行: <Server port="8005" shutdown="SHUTDOWN">
    ###tomcat shutdown端口 telnet/nc 连接到这个端口 输入暗号tomcat将会关闭
    
    ###8080 http协议端口
    69     <Connector port="8080" protocol="HTTP/1.1"
    70                connectionTimeout="20000"     
    71                redirectPort="8443" />
    
    ###8009 ajp协议端口 与apache连接使用
    115     <!-- Define an AJP 1.3 Connector on port 8009
    -->
    116     <!--
    117     <Connector protocol="AJP/1.3"
    118                address="::1"
    119                port="8009"
    120                redirectPort="8443" />
    121     -->
    
    #8009端口 是用来给 apache与tomcat进行连接使用
    #现在 tomcat+nginx 可以把 这一行8009注释 提高tomcat性能
            <Connector port="8009" protocol="AJP/1.3"
    redirectPort="8443" />
    
    #tomcat管理端 相应的配置
    ##管理端 实际生产环境 关闭
    37   <GlobalNamingResources>
    38     <!-- Editable user database that can also be 
    used by
    39         UserDatabaseRealm to authenticate users
    40     -->
    41     <Resource name="UserDatabase"
    auth="Container"
    42               
    type="org.apache.catalina.UserDatabase"
    43               description="User database that can 
    be updated and saved"
    44               
    factory="org.apache.catalina.users.MemoryUserDatabase
    Factory"
                      #指定管理端 密码文件
    45               pathname="conf/tomcat-users.xml" />
    46   </GlobalNamingResources>
    
    #配置 tomcat 虚拟主机的内容
    Nginx           tomcat 
    Server_name     Host name 域名
    root           appBase   站点目录
    
    #unpackWARs #自动解压war包  
    #autoDeploy 自动部署 把代码加载到jvm内存中
    148       <Host name="localhost"  appBase="webapps"
    149             unpackWARs="true" autoDeploy="true">
    150
    151         <!-- SingleSignOn valve, share 
    authentication between web applications
    152             Documentation at: 
    /docs/config/valve.html -->
    153         <!--
    154         <Valve 
    className="org.apache.catalina.authenticator.SingleSi
    gnOn" />
    155         -->
    156
    157         <!-- Access log processes all example.
    158             Documentation at: 
    /docs/config/valve.html
    159             Note: The pattern used is equivalent 
    to using pattern="common" -->
    
    #配置 日志
    160         <Valve 
    className="org.apache.catalina.valves.AccessLogValve"
                       directory="logs"
                       #日志文件 前缀是localhost_access_log 
    
     #日志后缀
    161                prefix="access" suffix=".log"
      #日志 里面的格式   &quot html语言中的 
    双引号
           #日志内容 类似于 log_format  
    162                pattern="%h %l %u %t 
    &quot;%r&quot; %s %b" />
    163
    164       </Host>
    #%h   客户端ip地址或者是域名
    #%l   (小写L) 远程用户  
    #%u   用户 Remote user that was authenticated (if 
    any), else '-' (escaped if required)
    #%t 时间 日期和时间
    #&quot 双引号
    #%r 请求起始行 $request 
    #%s   $status 状态码
    #%b   大小
    

    6.tomcat 部署应用及方式

    6.1 部署应用方式
    (1)如果开发给你的是war包 则把war包放入到 tomcat webapps 自动解压 自动部署
    (2)如果开发给你的是jar包 相当于jar包里面已经集成了tomcat java -jar xxxx.jar 选项
    image.png

    6.2 java开源软件

    (1)jpress java wordpress
    (2)zrlog java blog

    6.3部署应用-zrlog

    #准备数据库
    登陆数据库创建zrlog   加字符集
    create database zrlog charset utf8;
    
    #web03 安装应用 让应用连接 数据库
    cd  /app/tools
    把zrlog压缩包穿到/app/tools目录下
    改名
    mv  zrlog-2.1.14-5537197-release.war   zrlog.war
    复制到/app/tomcat/webapps
    cp          zrlog.war      /app/tomcat/webapps
    复制进去后会自动解压
    

    6.4去百度安装10.0.0.9:8080/zrlog

    image.png
    image.png
    安装完成后
    ip:8080/zrlog 首页
    http://10.0.0.9:8080/zrlog/admin 管理页面
    
    image.png

    6.5检查 数据库连接文件 和 用户上传 的目录

    #数据库连接
    [root@web03 /app/tomcat/webapps/zrlog]# cat ./WEB�INF/db.properties 
    #This is a database configuration file
    #Wed Jun 02 11:14:44 CST 2021
    driverClass=com.mysql.cj.jdbc.Driver
    user=all
    password=123456
    jdbcUrl=jdbc\:mysql\://172.16.1.51\:3306/zrlog?
    characterEncoding\=UTF�8&allowPublicKeyRetrieval\=true&useSSL\=false&serverTim
    ezone\=GMT
    #用户上传
    http://10.0.0.9:8080/zrlog/attached/image/20210602/2021
    0602111945_677.png
    

    7. tomcat 3种工作模式: bio , nio , apr

    7.1 io模型区别
    image.png
    7.2修改io模型
    ###nio
    protocol="org.apache.coyote.http11.Http11Nio2Protocol"
    #server.xml 中 修改 8080
       <Connector port="8080"
    protocol="org.apache.coyote.http11.Http11Nio2Protocol"
                   connectionTimeout="20000"
                   redirectPort="8443" />
    [root@web03 /app/tomcat]# grep -ni nio2   
    conf/server.xml
    69:   <Connector port="8080"
    protocol="org.apache.coyote.http11.Http11Nio2Protocol"
    查看修改结果-catalina.out日志
    17-Dec-2019 10:46:33.106 INFO [main] 
    org.apache.coyote.AbstractProtocol.start Starting 
    ProtocolHandler ["http-nio2-8080"]
    

    8. tomcat 多实例

    8.1多实例:在同一台服务器上面运行多个tomcat
    应用场景: 让服务器资源充分利用 使用多实例 E7(铂金CPU) 内存 512G 硬盘 1tb pci-e ssd * 8 raid 10 nginx
    注意事项: 端口不同与路径不同.
    /app/tomcat 8005
    /app/tomcat_8081 8006
    /app/tomcat_8082 8007
    8.2配置tomcat多实例 tomcat_8081 tomcat_8082
    cp -r /app/tomcat/ /app/tomcat_8081
    cp -r /app/tomcat/ /app/tomcat_8082
    
    [root@web03 /app/tomcat]# sed -i 's#8080#8081#g' 
    /app/tomcat_8081/conf/server.xml 
    [root@web03 /app/tomcat]# sed -i 's#8005#8006#g' 
    /app/tomcat_8081/conf/server.xml 
    [root@web03 /app/tomcat]# 
    [root@web03 /app/tomcat]# sed -i 's#8080#8082#g' 
    /app/tomcat_8082/conf/server.xml 
    [root@web03 /app/tomcat]# sed -i 's#8005#8007#g' 
    /app/tomcat_8082/conf/server.xml
    
    查看端口
    [root@oldboy-tomcat ~]# ss -lntup |grep java
    
    启动tomcat多实例与检查
    [root@oldboy-tomcat ~]# /app/tomcat_8081/bin/startup.sh
    [root@oldboy-tomcat ~]# 
    /app/tomcat_8082/bin/startup.sh
    
    查看端口
    [root@oldboy-tomcat ~]# ss -lntup |grep java
    
    
    #curl或浏览器访问tomcat多实例
    ###注意事项
    #10.0.0.7:8080/index.jsp 直接访问首页文件 或 展示首页文件
    #这个首页文件存放在webapps/ROOT下面 
    /app//tomcat/webapps/ROOT/index.jsp 
    #10.0.0.7:8080/odboy/index.jsp
    #/app//tomcat/webapps/oldboy/index.jsp 
    #tomcat访问首页文件 注意事项
    加入内容
    [root@web03 /app/tomcat]# echo tomcat_8080 
    >/app/tomcat/webapps/ROOT/oldboy.jsp 
    [root@web03 /app/tomcat]# echo tomcat_8081 
    >/app/tomcat_8081/webapps/ROOT/oldboy.jsp 
    [root@web03 /app/tomcat]# echo tomcat_8082 
    >/app/tomcat_8082/webapps/ROOT/oldboy.jsp
    测试
    [root@web03 /app/tomcat]# curl 
    10.0.0.9:8080/oldboy.jsp 
    tomcat_8080
    [root@web03 /app/tomcat]# curl 
    10.0.0.9:8081/oldboy.jsp 
    tomcat_8081
    [root@web03 /app/tomcat]# curl 
    10.0.0.9:8082/oldboy.jsp
    

    9tomcat的systemctl管理配置

    1.编写配置文件
    [root@web03 local]# cat   /usr/lib/systemd/system/tomcat.service 
    [Unit]
    Description=tomcat 8080 system cmd 
    After=network.target remote-fs.target nss-lookup.target
    
    
    [Service]
    Type=forking
    ExecStart=/app/tomcat/bin/startup.sh
    ExecStop=/app/tomcat/bin/shutdown.sh
    
    [Install]
    WantedBy=multi-user.target
    
    
    
    2.执行一步
    systemctl  daemon-reload 
    3.替换内容
    sed  -i  '2a source /etc/profile'  /app/tomcat*/bin/startup.sh   /app/tomcat*/bin/shutdown.sh
    4.执行
    systemctl  daemon-reload 
    5.使用systemctl开启
    systemctl   start  tomcat
    6.查看启动状态
    systemctl   status  tomcat
    
    
    
    
    其他案列修改里面的数字
    以及sed  -i  '2a source /etc/profile'  /app/tomcat*/bin/startup.sh   /app/tomcat*/bin/shutdown.sh
    
    [root@web03 ~]# cat/usr/lib/systemd/system/tomcat_8082.service
    [Unit]
    Description=tomcat 8082 system cmd 
    After=network.target remote-fs.target nss-lookup.target
    [Service]
    Type=forking
    ExecStart=/app/tomcat_8082/bin/startup.sh
    ExecStop=/app/tomcat_8082/bin/shutdown.sh
    [Install]
    WantedBy=multi-user.target
    systemctl daemon-reload
    

    10.tomcat监控功能

    10.1Tomcat远程监控 应用:
    开发: 给开发留个后门 开发/运维 通过门查看 tomcat(jvm)
    运维: 通过命令检查tomcat信息 通过监控软件检查获取tomcat信息
    
    10.2通过监控软件 可以监控 tomcat状态(jvm状态)
    1. 通过命令/脚本查看
    2. 开启tomcat监控功能 jmx 再让zabbix监控
    
    10.3通过命令行查看
    *jps
    *jmap
    *jstack
    *ps  jps  -lvm
    *sh show-busy-java-threads.sh
    上传show-busy-java-threads.sh到l系统中直接sh执行
    [root@web03 ~]# ./show-busy-java-threads.sh
    [1] Busy(0.0%) thread(21615/0x546f) stack of java process(21219) under user(root):
    
    process 进程    在内存中创建空间
    thread 线程       实际处理用户请求
    
    10.4进程与线程
    线程是指进程内的一个执行单元,
    #进程
    进程拥有自已独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调
    度。
    #线程
    线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调
    度
    #协程和线程
    协程避免了无意义的调度,由此可以提高性能:但同时协程也失去了线程使用
    多CPU的能力
    进程与线程的区别
    (1)地址空间:线程是进程内的一个执行单位,进程内至少有一个线程,他们
    共享进程的地址空间,而进程有白己独立
    的地址空间
    (2)资源拥有:进程是资源分配和拥有的单位,同一个进程内线程共享进程的
    资源
    (3)线程是处理器调度的基本单位,但进程不是
    (4)二者均可并发执行
    (5)每个独立的线程有一个程序运行的入口
    
    10.4linux下配置tomcat监控
    #开启tomcat远程监控 功能  
    #修改 tomcat/bin/catalina.sh   
    #CATALINA_OPTS java内置变量 修改java启动参数(tomcat) 
    # CATALINA_OPTS java启动参数 
    
    CATALINA_OPTS="$CATALINA_OPTS                 
    -Dcom.sun.management.jmxremote               #jmx remote 
      开启tomcat远程监控功能
    -Dcom.sun.management.jmxremote.port=12345    #指定端口
    12345 还有2个随机端口
    -Dcom.sun.management.jmxremote.authenticate=false  #auth 
    认证 是否开启远程监控认证(用户名 密码)
    -Dcom.sun.management.jmxremote.ssl=false           #是否开
    启https 
    -Djava.rmi.server.hostname=10.0.0.7"             #tomcat
    监听的ip地址  
                          #这里我们
    书写公网ip地址
                          #生产环境
    书写内网ip 
                          #本地ip 
    10.0.0.7 172.16.1.7
    
    
    [root@web03 ~]# grep -A5 '^CATALINA_OPT' 
    /app/tomcat/bin/catalina.sh 
    CATALINA_OPTS="$CATALINA_OPTS                 
    -Dcom.sun.management.jmxremote               
    -Dcom.sun.management.jmxremote.port=12345    
    -Dcom.sun.management.jmxremote.authenticate=false  
    -Dcom.sun.management.jmxremote.ssl=false           
    -Djava.rmi.server.hostname=10.0.0.9"
    启动查看进程
    systemctl   start    tomcat
    [root@web03 ~]# ps  -ef  |grep  java
    root      22059      1  0 20:29 ?        00:00:06 /app/jdk/bin/java -Djava.util.logging.config.file=/app/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=10.0.0.9 -Dignore.endorsed.dirs= -classpath /app/tomcat/bin/bootstrap.jar:/app/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/app/tomcat -Dcatalina.home=/app/tomcat -Djava.io.tmpdir=/app/tomcat/temp org.apache.catalina.startup.Bootstrap start
    root      22363  20814  0 21:01 pts/0    00:00:00 grep --color=auto java
    通过端口查询ss  -lntup  |grep  java
    [root@web03 ~]# ss  -lntip  |grep  java
    LISTEN     0      50        [::]:12345                 [::]:*                   users:(("java",pid=22059,fd=20))
    LISTEN     0      50        [::]:45178                 [::]:*                   users:(("java",pid=22059,fd=21))
    LISTEN     0      1       [::ffff:127.0.0.1]:8005                  [::]:*                   users:(("java",pid=22059,fd=67))
    LISTEN     0      50        [::]:34604                 [::]:*                   users:(("java",pid=22059,fd=19))
    LISTEN     0      100       [::]:8080                  [::]:*                   users:(("java",pid=22059,fd=56))
    增加了12345端口
    
    10.5通过windows jconsole 连接(模拟zabbix连接) linux tomcat
    image.png
    image.png
    10.6jvisualvm
    image.png
    image.png
    image.png
    image.png
    image.png
    10.7tomcat远程监控功能小结
    命令/脚本: jps -lvm / pstree / show_busy_java_threads.sh 
    远程监控功能: jmxremote / jmx
    小坑: 在 tomcat 8.5.x 配置开启功能 修改 catalina.sh 写成一行 或 加上
    \ (续行)
    

    11. Tomcat相关故障及排错

    1. tomcat 开机自启动故障
    #背景: 
    ##1.tomcat环境使用的jdk 是二进制
    ##2. 设置tomcat开机自启动
    #使用二进制安装jdk的时候 环境变量不在 /bin /sbin 
    /usr/local/bin   /usr/local/sbin 
    #在重启就没有找到这个命令
    #即使在 /etc/profile 中也是 无法识别
    需要在 /etc/rc.local  
    .   /etc/profile 
    ##/etc/rc.local 
    . /etc/profile
    /app/tomcat/bin/startup.sh
    
    tomcat(java) 服务器 运行占用大量swap 物理内存占用较少
    #java代码问题
    ## 增加swap 
    ##Linux内核参数:
    /etc/sysctl.conf   
    vm.swappiness=0
    sysctl -p  #内核参数生效
    vm.swappiness=0     #控制系统是否优先使用物理内存 数越小 越优先使
    用物理内存
    
    3.:tomcat负载高 15k-20k
    排查流程
    1. 🌟整体排查: vmstat /top/ps aux 找出哪个进程的问题
    2. 🌟找出进程对应线程id :
    1. 通过top -Hp java进程id 找出是哪个java线程的问题
    2. 或者 show_busy_java_threads.sh 
    3. 🌟转换:线程id--->16进制:问题线程的id 转换为16进制 线程id
    4. 🌟找出线程的详细信息: jstack (显示java 进程信息) jstack 
    java进程id 过滤 java线程的16进制id 与开发沟通
    5. 显示jvm信息: jmap (显示java jvm信息) jmap -heap java进程id 
    显示jvm的内存使用情况
    6. jvm内存内容导出:jmap (导出 jvm内存的内容 ) jmap -
    dump:format=b,file=/root/tomcat.bin pid
    7. 给开发分析jvm导出文件:通过 mat(Eclipse Memory Analyzer 
    Tool )分析 windows
    vmstat /top/ps aux
    tomcat: 找出这个tomcat的pid top -Hp 10789 精确的找出某个线程
    导致的
    并且能找出线程的id 10802 (10进制)转换为16进制
    

    12.https

    12.1集群
    image.png
    12.1web端配置
    web03和web04所有的配置一样这里就只写一个了
    1.<Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="443" />
     <Engine name="Catalina" defaultHost="zrlog.oldboylinux.cn">
    Host name="zrlog.oldboylinux.cn"  appBase="/code/zrlog"
                unpackWARs="true" autoDeploy="true">
    
    在这里主要修改网站名称,以及站点目录
    2.创建对应的站点目录
    mkdir  -p  /code/zrlog
    3.移动zrlog的所有配置文件到站点目录
    mv   /app/tomcat/webapps/zrlog*   /code/zrlog
    

    12.2lb端配置

    1.配置文件
    [root@lb01 ~]# cat  /etc/nginx/conf.d/zrlog.oldboy.com.conf
    upstream zrlog {
    server 10.0.0.9:8080;
    server 10.0.0.10:8080;
    }
    server {
       listen 80;
       server_name zrlog.oldboylinux.cn;
       return 302 https://zrlog.oldboylinux.cn$request_uri;
    }
    server {
       listen 443 ssl;
       server_name zrlog.oldboylinux.cn;
       ssl_certificate ssl_key/server.crt;
       ssl_certificate_key ssl_key/server.key;
       location / {
        proxy_pass http://zrlog;
        include  proxy_params;
       }
    }
    2.创建放ca证书的目录
    mkdir  -p  /etc/nginx/ssl_key
    上传证书到创建的目录中
    3.给证书改名
    mv 5745132_zrlog.oldboylinux.cn.key  server.key
    mv 5745132_zrlog.oldboylinux.cn.pem   server.crt
    [root@lb01 ssl_key]# ll 
    total 8
    -rw-r--r-- 1 root root 3818 Jun  4 08:55 server.crt
    -rw-r--r-- 1 root root 1675 Jun  4 08:55 server.key
    5.检查nginx配置文件启动nginx
    
    12.3注意事项
    ####之后把本地解析的 zrlog.oldboylinux.cn  解析到10.0.0.5   去访问一下   
    ####如果失败检查配置文件
    ####还有一个报错就是浏览器一直在让你安装  我们去检查tomcat的数据库文件有没有过来 
    ####移动数据库文件的话是要关掉tomcat的
    ####这样我们的集群跳转就完成了
    1.关键点,在web端互传的时候一定要关闭tomcat
    2.tomcat的端口 不改变一直是8080
    3.最后如果报错的话单台单台测试如果成功那就是nginx负载的问题
    

    13.tomcat nginx 动静态分离

    image.png
    13.1web端配置
    在web04上装完之后  要启动nginx  首先要把web03上的tomcat关闭 不然端口号会冲突
    在web04安装nginx
    ##现在我们去配置web04上的静态页面
    [root@web04 conf.d]# vim /etc/nginx/conf.d/zrlog.oldboylinux.cn.conf 
    server {
      listen 80;
      server_name zrlog.oldboylinux.cn;
      root /code/zrlog;
    }
    
    13.2lb端配置
    [root@lb01 ~]# vim  /etc/nginx/conf.d/zrlog.oldboy.com.conf 
    
    upstream zrlog {
    server 10.0.0.9:80;
    }
    upstream zrlog_static {
    server 10.0.0.10:80;
    }
    server {
       listen 80;
       server_name zrlog.oldboylinux.cn;
       return 302 https://zrlog.oldboylinux.cn$request_uri;
    }
    server {
       listen 443 ssl;
       server_name zrlog.oldboylinux.cn;
       ssl_certificate ssl_key/server.crt;
       ssl_certificate_key ssl_key/server.key;
       location / {
        proxy_pass http://zrlog;
        include  proxy_params;
       }
       location ~* \.(jpg|png|jpeg|bmp|gif|js|css)$ {
        proxy_pass http://zrlog_static;
        include  proxy_params;
       }
    }
    检查启动nginx
    去网页测试
    
    13.3注意事项
    web页面显示 502的话  去检查web03 tomcat的配置文件   
    可能是端口的问题
    然后就是检查每个服务器的tomcat   或者是lb01上的 nginx
    各种服务都起来之后呢  再去web页面访问  
    
    
    [root@web04 conf]# chown -R nginx.nginx /code/zrlog/
    [root@web04 conf]# chmod 755 /code/
    [root@web04 conf]# ll -d /code/
    drwxr-xr-x 4 root root 33 Jun  4 23:37 /code/
    nginx里面权限致观重要
    

    相关文章

      网友评论

        本文标题:综合架构tomcat

        本文链接:https://www.haomeiwen.com/subject/zlegsltx.html