前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >tomcat详解

tomcat详解

原创
作者头像
派大星在吗
发布2021-12-17 22:44:23
1.1K0
发布2021-12-17 22:44:23
举报
文章被收录于专栏:我的技术专刊我的技术专刊
1.jre-jdk-jvm介绍
代码语言:txt
复制
jre
代码语言:txt
复制
java runtime enviroment java运行环境
代码语言:txt
复制
jdk
代码语言:txt
复制
java delelopment kit java开发环境(很多内容) = jre + 额外java工具
代码语言:txt
复制
jvm
代码语言:txt
复制
 java virtual machine java虚拟机
代码语言:txt
复制
**1份代码 想在不同的系统使用
代码语言:txt
复制
**java 程序代码 运行在java虚拟机中 只要系统能有java环境(java虚拟机) 就可以运行代码
代码语言:txt
复制
**1份代码 处处使用问题 代码可移植性
代码语言:txt
复制
**对于 java虚拟机 一般关注 内存使用情况

二.准备环境与部署

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

1.tomcat服务管理

image.png

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

2.tomcat目录结构

image.png

3.tomcat管理端

image.png

代码语言:txt
复制
*注意:tomcat 8.5 对管理端限制更严格
代码语言:txt
复制
*要配置tomcat-user.xml之外
代码语言:txt
复制
*还限制 只能在本地使用127.0.0.1 访问管理的
代码语言:txt
复制
*从tomcat8.5开始 管理端默认只能通过 本地使用 127.0.0.1 访问 (类似于nginx all 127.0.0.1 ; deny all; )
代码语言:txt
复制
*默认情况下,只能从与Tomcat运行在同一台计算机上的浏览器访问管理器。如果要修改此限制,则需要编辑管理器的context.xml文
代码语言:txt
复制
件。
3.1查看登陆限制修改
代码语言:txt
复制
原文为
代码语言:txt
复制
[root@web03 /app/tomcat]# find -type f -name 
代码语言:txt
复制
"context.xml" |xargs grep 127
代码语言:txt
复制
./webapps/host-manager/META-INF/context.xml:         
代码语言:txt
复制
allow="127\d.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
代码语言:txt
复制
./webapps/manager/META-INF/context.xml:         
代码语言:txt
复制
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
代码语言:txt
复制
./webapps/host-manager/WEB-INF/manager.xml:         
代码语言:txt
复制
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
代码语言:txt
复制
修改为
代码语言:txt
复制
[root@web03 /app/tomcat]# find -type f -name 
代码语言:txt
复制
"context.xml" |xargs grep allow
代码语言:txt
复制
./webapps/host-manager/META-INF/context.xml:         
代码语言:txt
复制
allow="\d+\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
代码语言:txt
复制
./webapps/manager/META-INF/context.xml:         
代码语言:txt
复制
allow="\d+\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
代码语言:txt
复制
allow="\d+\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1"
代码语言:txt
复制
/>
3.2修改登陆账号密码conf/tomcat-user.xml

image.png

修改为
代码语言:txt
复制
[root@web03 ~]# cat  /app/tomcat/conf/tomcat-users.xml |grep  role
代码语言:txt
复制
  NOTE:  By default, no user is included in the "manager-gui" role required
代码语言:txt
复制
  NOTE:  The sample user and role entries below are intended for use with the
代码语言:txt
复制
  <role rolename="admin-gui"/>
代码语言:txt
复制
  <role rolename="manager-gui"/>
代码语言:txt
复制
  <role rolename="host-gui"/>
代码语言:txt
复制
  <user username="oldboy" password="oldboy" roles="admin-gui,manager-gui,host-gui"/>
3.3因为是修改的配置文件所以需要重启
代码语言:txt
复制
关闭
代码语言:txt
复制
[root@web03 ~]#  # /app/tomcat/bin/shutdown.sh 
代码语言:txt
复制
重启
代码语言:txt
复制
[root@web03 ~]#  # /app/tomcat/bin/startsh 
3.4提示登陆状态

image.png

3.5登录成功显示的信息

image.png

image.png

image.png

4.tomcat日志与进程信息

4.1 进程信息
代码语言:txt
复制
#ps命令查询 java进程信息
代码语言:txt
复制
[root@web03 ~]# ps  -ef  |grep  java
代码语言:txt
复制
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
代码语言:txt
复制
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
代码语言:txt
复制
root      29617  29411  0 15:35 pts/2    00:00:00 grep --color=auto java
代码语言:txt
复制
jps查看   jps   -lvm 显示最详细的信息  也可分开查看
代码语言:txt
复制
*[root@web03 ~]# jps
代码语言:txt
复制
28705 plugin-core.jar
代码语言:txt
复制
27620 Bootstrap
代码语言:txt
复制
29662 Jps
代码语言:txt
复制
*[root@web03 ~]# jps  -lvm
代码语言:txt
复制
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
代码语言:txt
复制
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
代码语言:txt
复制
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
代码语言:txt
复制
使用jps   -lvm   |grep   -V   jps
代码语言:txt
复制
[root@web03 ~]# jps  -lvm  |grep   jps
代码语言:txt
复制
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
代码语言:txt
复制
## java 高级命令 Troubleshooting Tools
代码语言:txt
复制
##jmap 取出 java进程信息 jvm内存信息 heap memory
代码语言:txt
复制
details for a process, core file
代码语言:txt
复制
##导出 信息  jmap  -heap   java_pid (pid就是上面的过滤出来的数字)
代码语言:txt
复制
[root@web03 ~]#  jps -lvm |grep -v jps |cut -d" "  -f1
代码语言:txt
复制
[root@web03 ~]# jmap  -heap  28705
代码语言:txt
复制
会出结果
代码语言:txt
复制
显示java真实的进程信息
代码语言:txt
复制
#jstack    加pid    Java process   显示java进程执行流程 调用信息 Troubleshooting Tools
4.2tomcat日志

image.png

代码语言:txt
复制
catalina.out   日志主要看
代码语言:txt
复制
#error 错误
代码语言:txt
复制
#startup 或 finished 启动所需的时间

5.tomcat配置文件

image.png

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

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

6.4去百度安装10.0.0.9:8080/zrlog

image.png

image.png

代码语言:txt
复制
安装完成后
代码语言:txt
复制
ip:8080/zrlog 首页
代码语言:txt
复制
http://10.0.0.9:8080/zrlog/admin 管理页面

image.png

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

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

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

7.1 io模型区别

image.png

7.2修改io模型
代码语言:txt
复制
###nio
代码语言:txt
复制
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
代码语言:txt
复制
#server.xml 中 修改 8080
代码语言:txt
复制
   <Connector port="8080"
代码语言:txt
复制
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
代码语言:txt
复制
               connectionTimeout="20000"
代码语言:txt
复制
               redirectPort="8443" />
代码语言:txt
复制
[root@web03 /app/tomcat]# grep -ni nio2   
代码语言:txt
复制
conf/server.xml
代码语言:txt
复制
69:   <Connector port="8080"
代码语言:txt
复制
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
代码语言:txt
复制
查看修改结果-catalina.out日志
代码语言:txt
复制
17-Dec-2019 10:46:33.106 INFO [main] 
代码语言:txt
复制
org.apache.coyote.AbstractProtocol.start Starting 
代码语言:txt
复制
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
代码语言:txt
复制
cp -r /app/tomcat/ /app/tomcat_8081
代码语言:txt
复制
cp -r /app/tomcat/ /app/tomcat_8082
代码语言:txt
复制
[root@web03 /app/tomcat]# sed -i 's#8080#8081#g' 
代码语言:txt
复制
/app/tomcat_8081/conf/server.xml 
代码语言:txt
复制
[root@web03 /app/tomcat]# sed -i 's#8005#8006#g' 
代码语言:txt
复制
/app/tomcat_8081/conf/server.xml 
代码语言:txt
复制
[root@web03 /app/tomcat]# 
代码语言:txt
复制
[root@web03 /app/tomcat]# sed -i 's#8080#8082#g' 
代码语言:txt
复制
/app/tomcat_8082/conf/server.xml 
代码语言:txt
复制
[root@web03 /app/tomcat]# sed -i 's#8005#8007#g' 
代码语言:txt
复制
/app/tomcat_8082/conf/server.xml
代码语言:txt
复制
查看端口
代码语言:txt
复制
[root@oldboy-tomcat ~]# ss -lntup |grep java
代码语言:txt
复制
启动tomcat多实例与检查
代码语言:txt
复制
[root@oldboy-tomcat ~]# /app/tomcat_8081/bin/startup.sh
代码语言:txt
复制
[root@oldboy-tomcat ~]# 
代码语言:txt
复制
/app/tomcat_8082/bin/startup.sh
代码语言:txt
复制
查看端口
代码语言:txt
复制
[root@oldboy-tomcat ~]# ss -lntup |grep java
代码语言:txt
复制
#curl或浏览器访问tomcat多实例
代码语言:txt
复制
###注意事项
代码语言:txt
复制
#10.0.0.7:8080/index.jsp 直接访问首页文件 或 展示首页文件
代码语言:txt
复制
#这个首页文件存放在webapps/ROOT下面 
代码语言:txt
复制
/app//tomcat/webapps/ROOT/index.jsp 
代码语言:txt
复制
#10.0.0.7:8080/odboy/index.jsp
代码语言:txt
复制
#/app//tomcat/webapps/oldboy/index.jsp 
代码语言:txt
复制
#tomcat访问首页文件 注意事项
代码语言:txt
复制
加入内容
代码语言:txt
复制
[root@web03 /app/tomcat]# echo tomcat_8080 
代码语言:txt
复制
>/app/tomcat/webapps/ROOT/oldboy.jsp 
代码语言:txt
复制
[root@web03 /app/tomcat]# echo tomcat_8081 
代码语言:txt
复制
>/app/tomcat_8081/webapps/ROOT/oldboy.jsp 
代码语言:txt
复制
[root@web03 /app/tomcat]# echo tomcat_8082 
代码语言:txt
复制
>/app/tomcat_8082/webapps/ROOT/oldboy.jsp
代码语言:txt
复制
测试
代码语言:txt
复制
[root@web03 /app/tomcat]# curl 
代码语言:txt
复制
10.0.0.9:8080/oldboy.jsp 
代码语言:txt
复制
tomcat_8080
代码语言:txt
复制
[root@web03 /app/tomcat]# curl 
代码语言:txt
复制
10.0.0.9:8081/oldboy.jsp 
代码语言:txt
复制
tomcat_8081
代码语言:txt
复制
[root@web03 /app/tomcat]# curl 
代码语言:txt
复制
10.0.0.9:8082/oldboy.jsp

9tomcat的systemctl管理配置

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

10.tomcat监控功能

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

11. Tomcat相关故障及排错

1. tomcat 开机自启动故障
代码语言:txt
复制
#背景: 
代码语言:txt
复制
##1.tomcat环境使用的jdk 是二进制
代码语言:txt
复制
##2. 设置tomcat开机自启动
代码语言:txt
复制
#使用二进制安装jdk的时候 环境变量不在 /bin /sbin 
代码语言:txt
复制
/usr/local/bin   /usr/local/sbin 
代码语言:txt
复制
#在重启就没有找到这个命令
代码语言:txt
复制
#即使在 /etc/profile 中也是 无法识别
代码语言:txt
复制
需要在 /etc/rc.local  
代码语言:txt
复制
.   /etc/profile 
代码语言:txt
复制
##/etc/rc.local 
代码语言:txt
复制
. /etc/profile
代码语言:txt
复制
/app/tomcat/bin/startup.sh
tomcat(java) 服务器 运行占用大量swap 物理内存占用较少
代码语言:txt
复制
#java代码问题
代码语言:txt
复制
## 增加swap 
代码语言:txt
复制
##Linux内核参数:
代码语言:txt
复制
/etc/sysctl.conf   
代码语言:txt
复制
vm.swappiness=0
代码语言:txt
复制
sysctl -p  #内核参数生效
代码语言:txt
复制
vm.swappiness=0     #控制系统是否优先使用物理内存 数越小 越优先使
代码语言:txt
复制
用物理内存
3.:tomcat负载高 15k-20k
代码语言:txt
复制
排查流程
代码语言:txt
复制
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端配置
代码语言:txt
复制
web03和web04所有的配置一样这里就只写一个了
代码语言:txt
复制
1.<Connector port="8080" protocol="HTTP/1.1"
代码语言:txt
复制
               connectionTimeout="20000"
代码语言:txt
复制
               redirectPort="443" />
代码语言:txt
复制
 <Engine name="Catalina" defaultHost="zrlog.oldboylinux.cn">
代码语言:txt
复制
Host name="zrlog.oldboylinux.cn"  appBase="/code/zrlog"
代码语言:txt
复制
            unpackWARs="true" autoDeploy="true">
代码语言:txt
复制
在这里主要修改网站名称,以及站点目录
代码语言:txt
复制
2.创建对应的站点目录
代码语言:txt
复制
mkdir  -p  /code/zrlog
代码语言:txt
复制
3.移动zrlog的所有配置文件到站点目录
代码语言:txt
复制
mv   /app/tomcat/webapps/zrlog*   /code/zrlog

12.2lb端配置

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

13.tomcat nginx 动静态分离

image.png

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二.准备环境与部署
    • 1.tomcat服务管理
    • 2.tomcat目录结构
    • 3.tomcat管理端
      • 4.tomcat日志与进程信息
        • 5.tomcat配置文件
          • 6.tomcat 部署应用及方式
            • 6.2 java开源软件
              • 6.3部署应用-zrlog
                • 6.4去百度安装10.0.0.9:8080/zrlog
                  • 6.5检查 数据库连接文件 和 用户上传 的目录
                    • 7. tomcat 3种工作模式: bio , nio , apr
                      • 8. tomcat 多实例
                        • 9tomcat的systemctl管理配置
                          • 10.tomcat监控功能
                            • 11. Tomcat相关故障及排错
                              • 12.https
                                • 12.2lb端配置
                                  • 13.tomcat nginx 动静态分离
                                  相关产品与服务
                                  访问管理
                                  访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
                                  领券
                                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档