Tomcat

综合架构tomcat

2021-06-18  本文已影响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里面权限致观重要
上一篇下一篇

猜你喜欢

热点阅读