tomcat的搭建和介绍

第19章 tomcat的搭建

19.1 tomcat 学习之前的预备知识

19.1.1 什么是 JVM 和 JDK,JRE

  • JVM java虚拟机,实现一份代码可以在不同的平台执行,具有可移植性,jvm只关注java虚拟机的情况
  • JDK java开发环境
  • JRE java运行环境

tomcat的搭建和介绍

19.2 tomcat 的服务部署

19.2.1 tomcat 服务的配置

[root@web01 webapps] # cd /server/tools/

[root@web01 tools] # tar xf apache-tomcat-8.0.27.tar.gz -C /application

[root@web01 application] # ln -s /application/apache-tomcat-8.0.27/ /application/tomcat

[root@web01 application] # cd /server/tools/

[root@web01 tools] # tar xf jdk-8u60-linux-x64.tar.gz -C /application/

[root@web01 application] # ln -s jdk1.8.0_60/ /application/jdk

cat >>/etc/profile<

export JAVA_HOME=/application/jdk

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

export

CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOM

E/lib/tools.jar

export TOMCAT_HOME=/application/tomcat

EOF

19.2.2 tomcat 版本的选择

[root@web01 ipv4] # java -version

java version “1.8.0_60”

Java(TM) SE Runtime Environment (build 1.8.0_60-b27)

Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

You have new mail in /var/spool/mail/root

[root@web01 ipv4] #

19.2.3 j vm版本的选择

[root@web01 ipv4] # /application/tomcat/bin/version.sh 查看tomcat 和jdk 的版本是不是一致的

Server number: 8.0.27.0

OS Name: Linux

OS Version: 3.10.0-1062.1.1.el7.x86_64

Architecture: amd64

JVM Version: 1.8.0_60-b27

19.3 tomcat 服务的启动

19.3.1 启动命令

[root@web01 ipv4] # /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

Using CLASSPATH: /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar

Tomcat started.

You have new mail in /var/spool/mail/root

[root@web01 ipv4] #

[root@web01 tomcat] # ps -ef | grep java

root 12462 1 96 19:50 pts/2 00:00:02 /application/jdk/bin/java -Djava.util.logging.config.file=/application/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -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.7 -Djava.endorsed.dirs=/application/tomcat/endorsed -classpath /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/application/tomcat -Dcatalina.home=/application/tomcat -Djava.io.tmpdir=/application/tomcat/temp org.apache.catalina.startup.Bootstrap start

root 12480 8056 0 19:50 pts/2 00:00:00 grep –color=auto java

[root@web01 tomcat] # ss -lnptu | grep java

tcp LISTEN 0 100 :::8009 :::*

tcp LISTEN 0 100 :::8080 :::* users:((“java”,pid=12462,fd=50))

[root@web01 tomcat] #

tomcat的搭建和介绍

19.3.2 关闭命令

[root@web01 ipv4] # /application/tomcat/bin/shutdown.sh

Using CATALINA_BASE: /application/tomcat

Using CATALINA_HOME: /application/tomcat

Using CATALINA_TMPDIR: /application/tomcat/temp

Using JRE_HOME: /application/jdk

Using CLASSPATH: /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar

[root@web01 ipv4] #

[root@web01 tomcat] # ps -ef | grep java

root 12451 8056 0 19:50 pts/2 00:00:00 grep –color=auto java

[root@web01 tomcat] # ss -lnptu | grep java

[root@web01 tomcat] #

19.3.3 核心命令

[root@web01 ipv4] # /application/tomcat/bin/ catalina.sh 表示tomcat 启动还是关闭都会调用这个命令

19.4 tomcat 的目录介绍

19.4.1 conf 目录介绍

19.4.1.1 server.xml

主配置文件

22 的shutdown 端口,连接tomcat 的时候,连接这个端口,并且输入暗号tomcat 就会断开

tomcat的搭建和介绍

41

42 type=”org.apache.catalina.UserDatabase”

43 description=”User database that can be updated and saved”

44 factory=”org.apache.catalina.users.MemoryUserDatabaseFactory”

45 pathname=”conf/tomcat-users.xml” />

46

tomcat的搭建和介绍

69

tomcat的搭建和介绍

94 和tomcat 连接的时候预留的端口(如果不是tomcat 建议将这行注释掉)

126

127 unpackWARs=”true” autoDeploy=”true”>定义上传到站点目录的war 包是不是自动解压

tomcat的搭建和介绍

138

139 prefix=”localhost_access_log” suffix=”.txt”访问日志的前缀和后缀

140 pattern=”%h %l %u %t “%r” %s %b” />

tomcat的搭建和介绍

19.4.1.2 tomcat-users.xml

tomcat管理配置文件

19.4.1.3 web.xml

tomcat的额外功能

19.4.2 bin 目录介绍

19.4.2.1 shutdown.sh

关闭tomcat程序

19.4.2.2 startup.sh

开启tomcat程序

19.4.2.3 Catalina.sh

  • tomcat的核心脚本,shutdown.sh和startup.sh都会调用这个核心脚本.

  • java远程管理配置

  • 配置jvm的参数信息

19.4.2.4 version.sh

查看tomcat和jdk的版本是不是可以兼容

19.4.3 webapps 目录介绍

java程序的站点目录

  • 注意:java站点目录想要获取首页文件,不能讲信息放入到webapps下面就可以访问,需要在加入你下面的具体目录,默认是ROOT

19.4.3.1 db.protifies( 记录和数据库进行连接的一些信息 )

[root@web01 bin] # cd /application/tomcat/webapps/jpress/WEB-INF/classes/

You have new mail in /var/spool/mail/root

[root@web01 classes] # ll

total 36

-rw-r–r– 1 root root 163 Dec 17 09:42 db.properties

19.4.4 logs 目录介绍

19.4.4.1 catalina.2019-12-17.log

Catalina的日志切割

19.4.4.2 catalina.out

记录tomcat最详细的信息(查看error和start)

  • 注意,日志切割以后是不会自己清零,重新记录的,需要自己手动清空里面的日志
19.4.4.2.1 为什么日志不可以删除,需要清空数据来处理了

因为对于日志文件来说,完全删除一个文件是要具备2个条件的

  1. 日志必须的硬链接数为0
  2. 关联的日志进程数为0(lsof| grep delete),如果关联进程数为0,就算你删除文件,由于他还是指向的日志的inode,所以日志不会释放空间

19.4.4.3 access_log.2019-12-16.txt

tomcat的访问日志

tomcat的搭建和介绍

tomcat的搭建和介绍

19.5 tomcat 的管理端的配置

19.5.1 注意事项

  • tomcat管理端的配置在测试和调试阶段可以打开进行使用
  • tomcat管理端在正式环境关闭(以免黑客的攻击)

19.5.2 配置的路径

19.5.2.1 配置路径并且将信息填写好

[root@web01 ~] # cd /application/tomcat/conf/

[root@web01 conf] # vim tomcat-users.xml

xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=”http://tomcat.apache.org/xml tomcat-users.xsd”

version=”1.0″>

配置server status

配置Manage app

配置HostManage

[root@web01 conf] #

tomcat的搭建和介绍

19.5.2.2 tomcat 服务关闭并且启动

[root@web01 conf] # /application/tomcat/bin/shutdown.sh

Using CATALINA_BASE: /application/tomcat

Using CATALINA_HOME: /application/tomcat

Using CATALINA_TMPDIR: /application/tomcat/temp

Using JRE_HOME: /application/jdk

Using CLASSPATH: /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar

You have new mail in /var/spool/mail/root

[root@web01 conf] # /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

Using CLASSPATH: /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar

Tomcat started.

[root@web01 conf] #

19.5.2.3 web 网站查看结果

tomcat的搭建和介绍

tomcat的搭建和介绍

tomcat的搭建和介绍

19.6 tomcat 的部署及应用方式

19.6.1 tomcat 安装成功

采用编译的方法安装,这里就不详细说了

19.6.2 上传网站代码 (jpress)

将jpress代码安装包放入到webapps目录下

19.6.3 配置数据库信息

19.6.3.1 安装 mariadb 数据库

[root@db ~] # yum -y install mariadb-server mariadb

19.6.3.2 创建 tomcat 所使用的数据库

MariaDB [(none)]> create database jpress charset utf8;

19.6.3.3 查看创建的数据库信息

MariaDB [(none)]> show create database jpress;

+———-+—————————————————————–+

| Database | Create Database |

+———-+—————————————————————–+

| jpress | CREATE DATABASE jpress /!40100 DEFAULT CHARACTER SET utf8 / |

+———-+—————————————————————–+

1 row in set (0.01 sec)

19.6.3.4 创建 jpress 用户

MariaDB [(none)]> grant all on jpress.* to ‘jpress’@’172.16.1.%’ identified by ‘jpress’;

19.6.3.5 启动 maridab 数据库

[root@db ~] # systemctl restart mariadb.service

19.6.4 启动 tomcat

[root@web01 conf] # /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

Using CLASSPATH: /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar

Tomcat started.

You have new mail in /var/spool/mail/root

[root@web01 conf] #

19.6.5 web 网站登录

tomcat的搭建和介绍

tomcat的搭建和介绍

tomcat的搭建和介绍

tomcat的搭建和介绍

19.6.6 实现 tomcat 二进制安装开机自启

[root@web01 webapps] # vim /etc/rc.local

source /etc/profile

/application/tomcat/bin/startup.sh

tomcat的搭建和介绍

19.7 tomcat 常见的 3 种工作模式介绍

19.7.1 tomcat 的 3 种模式比较

模式

应用版本

核心点

特点

bio(blocking io)

tomcat7 及以前的

同步模式,容易阻塞

一个线程处理一个请求,在并发量高的时候,容易造成线程数多,导致资源的浪费

nio(new io)

tomcat8

异步模式,不容易阻塞

nio1(默认使用),nio2 可以少量线程处理大量请求

apr(Apache

Portable

Runtime)

tomcat8

异步模式的

高并发的情况下使用

19.7.2 配置不同的工作模式

69

69

69

19.8 tomcat多实例介绍

19.8.1 什么是 tomcat 多实例 , 为什么要创建 tomcat 多实例

  • 可以在1台服务器上面可以运行多个tomcat

19.8.2 创建多实例的时候要注意的事项

  • 端口不同
  • 路径不同

19.8.3 多实例的创建

19.8.3.1 解压tomcat包,并且移到/application目录下,并且创建软连接

[root@web01 tools]# tar xf apache-tomcat-8.0.27.tar.gz 解压tomcat 包

[root@web01 tools]# cp -r apache-tomcat-8.0.27 tomcat8081 讲解压的包进行复制,并且修改名称

[root@web01 tools]# cp -r apache-tomcat-8.0.27 tomcat8082 将解压的包进行复制,并且修改名称

[root@web01 tools]# mv tomcat808* /application/移动到/application 目录下

[root@web01 tools]# ll /application/

drwxr-xr-x 9 root root 160 Dec 16 12:01 apache-tomcat-8.0.27

lrwxrwxrwx 1 root root 25 Dec 16 11:52 jdk ->/application/jdk1.8.0_60/

drwxr-xr-x 8 10 143 255 Aug 5 2015 jdk1.8.0_60

drwxr-xr-x 6 root root 54 Nov 5 19:03 nginx-1.16.1

lrwxrwxrwx 1 root root 34 Dec 16 12:01 tomcat ->/application/apache-tomcat-8.0.27/

drwxr-xr-x 9 root root 160 Dec 17 11:10 tomcat8081

drwxr-xr-x 9 root root 160 Dec 17 11:10 tomcat8082

[root@web01 application]# sed -i ‘s#8080#8081#g’ tomcat8081 的网站web 端口改为8081

tomcat8081/conf/server.xml

[root@web01 application]# sed -i ‘s#8005#8006#g’将关闭tomcat 进程端口8005 改为8006

tomcat8081/conf/server.xml

[root@web01 application]# sed -i ‘s#8009#8010#g’将apache 和tomcat 连接的端口8009 改为8010

tomcat8081/conf/server.xml

[root@web01 application]#

[root@web01 application]#

[root@web01 application]# sed -i ‘s#8080#8082#g’ tomcat8080 的网站web 端口改为8082

tomcat8082/conf/server.xml

[root@web01 application]# sed -i ‘s#8005#8007#g’将关闭tomcat 进程端口8005 改为8007

tomcat8082/conf/server.xml

[root@web01 application]# sed -i ‘s#8009#8011#g’将apache 和tomcat 连接的端口8009 改为8011

tomcat8082/conf/server.xml

19.8.3.2 启动 tomcat8081 和 tomcat8082 服务

[root@web01 ~] # /application/tomcat8081/bin/startup.sh 启动8081tomcat 服务

Using CATALINA_BASE: /application/tomcat8081

Using CATALINA_HOME: /application/tomcat8081

Using CATALINA_TMPDIR: /application/tomcat8081/temp

Using JRE_HOME: /application/jdk

Using CLASSPATH: /application/tomcat8081/bin/bootstrap.jar:/application/tomcat8081/bin/tomcat-juli.jar

Tomcat started.

You have new mail in /var/spool/mail/root

[root@web01 ~] # /application/tomcat8082/bin/startup.sh 启动8082tomcat 服务

Using CATALINA_BASE: /application/tomcat8082

Using CATALINA_HOME: /application/tomcat8082

Using CATALINA_TMPDIR: /application/tomcat8082/temp

Using JRE_HOME: /application/jdk

Using CLASSPATH: /application/tomcat8082/bin/bootstrap.jar:/application/tomcat8082/bin/tomcat-juli.jar

Tomcat started.

[root@web01 ~] #

19.8.3.3 查看 tomcat 启动的端口和进程信息

[root@web01 ~] # ss -lnptu | grep java

tcp LISTEN 0 50 :::12345 :::* users:((“java”,pid=11734,fd=20))

tcp LISTEN 0 1 ::ffff:127.0.0.1:8005 :::* users:((“java”,pid=11734,fd=68))

tcp LISTEN 0 1 ::ffff:127.0.0.1:8006 :::* users:((“java”,pid=11653,fd=64))

tcp LISTEN 0 1 ::ffff:127.0.0.1:8007 :::* users:((“java”,pid=11675,fd=64))

tcp LISTEN 0 100 :::8009 :::* users:((“java”,pid=11734,fd=51))

tcp LISTEN 0 100 :::8010 :::* users:((“java”,pid=11653,fd=47))

tcp LISTEN 0 100 :::8011 :::* users:((“java”,pid=11675,fd=47))

tcp LISTEN 0 100 :::8080 :::* users:((“java”,pid=11734,fd=50))

tcp LISTEN 0 100 :::8081 :::* users:((“java”,pid=11653,fd=46))

tcp LISTEN 0 100 :::8082 :::* users:((“java”,pid=11675,fd=46))

tcp LISTEN 0 50 :::34294 :::* users:((“java”,pid=11734,fd=21))

tcp LISTEN 0 50 :::39958 :::* users:((“java”,pid=11734,fd=19))

[root@web01 ~] # ps -ef | grep java

root 11653 1 3 19:51 pts/0 00:00:04 /application/jdk/bin/java -Djava.util.logging.config.file=/application/tomcat8081/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/application/tomcat8081/endorsed -classpath /application/tomcat8081/bin/bootstrap.jar:/application/tomcat8081/bin/tomcat-juli.jar -Dcatalina.base=/application/tomcat8081 -Dcatalina.home=/application/tomcat8081 -Djava.io.tmpdir=/application/tomcat8081/temp org.apache.catalina.startup.Bootstrap start

root 11675 1 3 19:51 pts/0 00:00:04 /application/jdk/bin/java -Djava.util.logging.config.file=/application/tomcat8082/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/application/tomcat8082/endorsed -classpath /application/tomcat8082/bin/bootstrap.jar:/application/tomcat8082/bin/tomcat-juli.jar -Dcatalina.base=/application/tomcat8082 -Dcatalina.home=/application/tomcat8082 -Djava.io.tmpdir=/application/tomcat8082/temp org.apache.catalina.startup.Bootstrap start

root 11734 1 15 19:52 pts/0 00:00:03 /application/jdk/bin/java -Djava.util.logging.config.file=/application/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -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.7 -Djava.endorsed.dirs=/application/tomcat/endorsed -classpath /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/application/tomcat -Dcatalina.home=/application/tomcat -Djava.io.tmpdir=/application/tomcat/temporg.apache.catalina.startup.Bootstrap start

root 11785 11497 0 19:53 pts/0 00:00:00 grep –color=auto java

[root@web01 ~] #

19.8.3.4 登陆 web 界面

tomcat的搭建和介绍

tomcat的搭建和介绍

tomcat的搭建和介绍

19.9 tomcat 监控功能介绍

19.9.1 通过监控软件可以监控 tomcat 状态

主要是查看jvm的状态(jvm里面主要是关注内存的使用率信息)

19.9.2 常见的监控方法有哪些

  • 通过命令或者脚本查看
  • 开启tomcat监控功能,再让zabbix监控

19.9.2.1 命令的方法来查看进程程度

19.9.2.1.1 java的一个查看java信息的命令

[root@web01 ROOT] # jps -lmv

11653 org.apache.catalina.startup.Bootstrap start -Djava.util.logging.config.file=/application/tomcat8081/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/application/tomcat8081/endorsed -Dcatalina.base=/application/tomcat8081 -Dcatalina.home=/application/tomcat8081 -Djava.io.tmpdir=/application/tomcat8081/temp

19.9.2.1.2 使用脚本来查看线程的繁忙程度
  • 使用pstree可以查看所有的进程和线程的PID值

  • pstree -H PID值:指定查找特定PID的线程信息(不能和-np一起使用)

  • pstree -np:查找所有的进程和线程信息,并且显示pid值(p)

tomcat的搭建和介绍

[root@web01 scripts] # ./show-busy-java-threads.sh

[1] Busy(73.0%) thread(2543/0x9ef) stack of java process(2542) under user(root):

“main” #1 prio=5 os_prio=0 tid=0x00007f4788009000 nid=0x9ef waiting on condition [0x00007f478e5db000]

java.lang.Thread.State: WAITING (parking)

at sun.misc.Unsafe.park(Native Method)

  • Busy 指的是线程的繁忙程度(默认脚本列出来的第一个就是最繁忙)
  • thread(2543/0x9ef)) 指的是线程的PID值/16进制的PID值
  • process 指的是线程所属的进程PID值
  • 进程和线程的区别

  • 进程简要说是在内存中创建空间

  • 线程简要说就是真正处理用户请求的信息
  • 线程是进程内的一个执行单位,一个进程里面至少一个线程,他们共享进程的地址空间,但是进程与进程之间独立的
  • 资源的调度:进程是分配资源和拥有资源的地方,线程共享进程资源
  • 二者均可并发执行
  • 线程是处理器的基本单位,但是进程不是
  • 每个线程都有一个独立的程序运行的接口

19.9.2.2 软件开启 tomcat 监控功能

19.9.2.2.1 配置tomcat监控

vim /application/tomcat/bin/catalina.sh

97 CATALINA_OPTS=”$CATALINA_OPTS java 内置变量,修改java 启动参数

98 -Dcom.sun.management.jmx remote 开启tomcat 远程监控监控功能

99 -Dcom.sun.management.jmxremote.port=12345 监控的端口信息

100 -Dcom.sun.management.jmxremote.authenticate=false 远程监控的认证信息

101 -Dcom.sun.management.jmxremote.ssl=false https 功能是否开启

102 -Djava.rmi.server.hostname=10.0.0.7″远程监听的主机IP 地址

97 CATALINA_OPTS=”$CATALINA_OPTS

98 -Dcom.sun.management.jmxremote

99 -Dcom.sun.management.jmxremote.port=12345

100 -Dcom.sun.management.jmxremote.authenticate=false

101 -Dcom.sun.management.jmxremote.ssl=false

102 -Djava.rmi.server.hostname=10.0.0.7″

扩展:java内置变量去哪查看(-D后面接的就是java内置变量)

[root@web01 bin] # ps -ef | grep java

root 2542 1 0 08:00 pts/0 00:00:11 /application/jdk/bin/java -Djava.util.logging.config.file=/application/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager

-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.7

-Djava.endorsed.dirs=/application/tomcat/endorsed -classpath /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar

-Dcatalina.base=/application/tomcat

-Dcatalina.home=/application/tomcat

-Djava.io.tmpdir=/application/tomcat/temp org.apache.catalina.startup.Bootstrap start

root 7534 2379 0 09:15 pts/0 00:00:00 grep –color=auto java

19.9.2.2.2 软件连接tomcat进行监控查看
  • 在windows下安装jdk软件(注意不要改安装目录,要不会有问题)

tomcat的搭建和介绍
  • 通过windows jconsole 连接(模拟zabbix连接) linux tomcat(输入C:\Program Files\Java\jdk1.8.0_31\bin找见jconsole.exe)

tomcat的搭建和介绍
  • 打开软件开始监测

tomcat的搭建和介绍

tomcat的搭建和介绍

tomcat的搭建和介绍

tomcat的搭建和介绍

19.10 tomcat 与 nginx

19.10.1 tomcat(LNMT)

  • tomcat可以处理静态和动态的资源
  • tomcat处理静态资源能力比较弱
  • nginx处理静态资源,遇到动态资源在nginx发送给tomcat即可

19.10.2 搭建 LNMT

19.10.2.1 方法一(模仿LNMP来搭建LNMT)

[root@web01 jpress]# cat /etc/nginx/conf.d/tomcat.conf

server {

listen 80;

server_name java.oldboy.com;

client_max_body_size 10m;

root /application/tomcat/webapps;

location / {

index index.jsp index.html index.htm;

}

location ~ .jsp$ {

proxy_pass 127.0.0.1:8080;

}

}

19.10.2.2 方法二 (nginx 反向代理 + tomcat)

upstream tomcat {

server 10.0.0.7:8080;

server 10.0.0.7:8081;

server 10.0.0.8:8080;

}

server {

listen 80;

server_name tomcat.oldboy.com;

location / {

proxy_pass http://tomcat ;

}

}

19.10.2 搭建 LNMP

  • nginx处理静态资源
  • 动态资源nginx遇到在发送给php进行处理

19.11 tomcat 的故障排查

19.11.1 解决 tomcat 服务器占用大量 swap 空间的问题

因为tomcat占用的是本身的swap空间,不会占用系统内存,针对这个情况,做如下解决

19.11.1.1 修改系统内核参数来解决

19.11.1.1.1 查找内核路径

内核对应的目录在:/proc/sys/目录下

内核对应的文件在: /proc/sys/vm/swappiness

  • 修改系统内核(修改系统内核去/etc/sysctl.conf)

[root@web01 sys] # vim /etc/sysctl.conf

sysctl settings are defined through files in

vm.swappiness =0 修改为0 ,不使用swap 空间,优先使用物理内存

19.1.1.1.1.2 让内核重新加载生效

[root@web01 sys] # sysctl -p

vm.swappiness = 0

[root@web01 sys] #

19.11.2 tomcat 负载比较高

19.11.2 .1 查看负载比较高的命令

vmstat/top/ps aux

tomcat的搭建和介绍
  • r 表示r越大,说明内存的使用越高
  • b 表示b越大,说明磁盘的IO使用较高

19.11.2.2 查看发现内存的使用率比较高,再次使用top查看

tomcat的搭建和介绍

19.11.2.3 查看 tomcat(java) 的进程 ID ,并且使用命令查看详细的进程信息,找出来哪个线程造成的问题

H 显示进程下面的详细线程信息

p 指定单独的进程信息

tomcat的搭建和介绍

19.11.2. 4 ( jstack ) 将线程占有率高的 ID 值转换成 16 进制,并且通过命令 jstack 查看问题信息

[root@web01 sys] # echo ‘obase=16;2544’| bc

9F0

[root@web01 sys] #

tomcat的搭建和介绍

将上面的信息查出来发给研发分析问题原因

19.11.2.5 ( jmap -heap ) 显示jvm的内存信息

tomcat的搭建和介绍

19.11.2.6 (jmap -dump) 将内存数据导出来

[root@web01 sys] # jmap -dump:format=b,file=/tmp/aa.bin 2542

Dumping heap to /tmp/aa.bin …

Heap dump file created

[root@web01 sys] #

19.11.3 总结下 tomcat 负载高的配错思路

  • 使用命令查看是哪个进程的问题(top/ps/vmstat)
  • 使用top -Hp 进程PID值来分析具体是进程中的哪个线程问题
  • 将不正常的线程PID值转换成16进制数
  • 使用jstack -l 进程PID值 | grep -iC 5 线程的16进制数,查找出问题交给研发进行处理,在这个情况下基本可以处理成功,如果不行,使用如下命令
  • jmap -heap 进程PID值,可以显示jvm的内存信息
  • 在使用jmap -dump命令导出来,并且将数据导入到windows电脑上进行分析
  • 分析工具使用MAT(Memory Analyzer Tool)来进行分析

19.12 tomcat 优化

19.12.1 安全优化

19.12.1.1 telenet 管理端口和暗号进行修改

[root@web01 sys] # cd /application/tomcat/conf/

[root@web01 conf] # vim server.xml

22 这行进行修改

19.12.1.2 ajp 端口进行保护

94 和tomcat 连接的端口

注意:如果你使用的不是apache,建议将他给关闭

19.12.1.3 将管理端给删除

  1. 删除默认的tomcat/conf/tomcat-users.xml文件,重启tomcat后将会自动生成新的文件
  2. 删除tomcat /webapps下默认的所有目录和文件(除了自己上传的代码(jpress和ROOT),剩下的都可以))
  3. 将tomcat 应用根目录配置为tomcat安装目录以外的目录;

19.12.1.4 降权启动服务 (keep in jail)

让普通用户的权限来进行运行服务

19.12.1.5 文件列表访问功能关闭 ( 如果不懂可以理解为 nginx 服务的网络共享一样 (autoindex on;))

[root@web01 conf] # cat /application/tomcat/conf/web.xml

默认false ,如果是比较老的版本是开启的

19.12.1.6 版本信息的隐藏

  • 在访问tomcat失败的时候会出现版本信息的暴露,针对这个情况我们做些java代码的优雅显示

tomcat的搭建和介绍

[root@web01 conf] # cat /application/tomcat/conf/web.xml

19.12.1.7 修改访问软件的服务名称

  • 实现tomcat访问网站但是里面显示的是nginx服务

[root@web01 conf] # vim /application/tomcat/conf/server.xml

server=”nginx-1.16.1″修改为nginx-1.16.1

maxThreads=”500″

minSpareThreads=”10″

connectionTimeout=”20000″

redirectPort=”8443″ />

tomcat的搭建和介绍

19.12.1.8 设置后台访问权限 (allow,deny)

reloadable=”false” crossContext=”true”>

allow=”61.148.18.138,61.135.165.” deny=”...*”/>

19.12.1.9 tomcat 启动停止脚本权限更改

将权限更改为700,默认755 ,8.5版本以后就默认是700

19.12.1.10 访问日志的规范

[root@web01 conf] # vim /application/tomcat/conf/server.xml

directory=”logs” prefix=”localhost_access_log.”

suffix=”.txt”

pattern=”%h %l %u %t %r %s %b %{Referer}i%{User-Agent}i %D” resolveHosts=”false”/>

  • {Referer}I 定义从哪个网站跳转过来的
  • {User-Agent} 定义客户端访问tomcat所使用的的终端信息

19.12.2 性能优化

19.12.2.1 设置并发线程的最大数量

  • maxThreads=”500″最大的线程数量,一般200-400之间
  • minSpareThreads=”10″空闲时候最小的线程数量

70 server=”nginx-1.16.1″

71 connectionTimeout=”20000″

72 redirectPort=”8443″ />

19.12.2.2 打开 java 压力测试工具

路径: C:\Users\liangyuxing\Desktop\apache-jmeter-5.2.1\bin\jmeter.bat

19.12.2.2.1 修改语言信息

tomcat的搭建和介绍
19.12.2.2.2 添加线程组

tomcat的搭建和介绍

tomcat的搭建和介绍

tomcat的搭建和介绍

tomcat的搭建和介绍
19.12.2.2.3 开始测试
  • 查看结果树和聚合报告相当于创建了监控,你在测试的过程中,这里可以看见数据

tomcat的搭建和介绍

tomcat的搭建和介绍

19.12.2.3 将线程进行修改为最大 500, 最小 10

70 server=”nginx-1.16.1″

71 maxThreads=”500″ 设置线程的最大线程数量

72 minSpareThreads=”10″ 空闲时候最小的线程数量

73 connectionTimeout=”20000″

74 redirectPort=”8443″ />

tomcat的搭建和介绍

Original: https://www.cnblogs.com/liangyuxing/p/12076631.html
Author: HXX-LYX
Title: tomcat的搭建和介绍

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/596646/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球