tomcat与java

1. 学习内容要点

  • tomcat jvm jdk jre

  • tomcat 环境部署

  • jdk 1.8

  • tomcat 8.5.50

  • tomcat目录结构

  • bin/ startup.sh shutdown.sh catalina.sh (配置tomcat监控功能

  • 配置java(tomcat) 启动参数 jvm优化)

  • conf/ server.xml web.xml tomcat-user.xml

  • ogs / catalina.out (每日切割 切割后文件内容不会被清空)

  • catalina.2019-12-12.log access.log

  • 日志: /var/log/messages secure cron

  • rsync: /var/log/rsyncd.log

  • nginx: access.log error.log

  • zabbix: zabbix_server.log zabbix_agentd.log

  • tomcat: catalina.out localhost_access_log.2019-12-17.txt

  • webapps

  • 配置tomcat管理端

  • tomcat的配置文件

  • tomcat 部署应用及方式

  • tomcat3种工作模式: bio , nio , apr

  • tomcat 多实例: 端口不同 路径

  • tomcat 监控功能

  • tomcat 与 nginx

  • tomcat 故障及排查 jstack jmap

  • tomcat 优化

  • tomcat 性能及压力测试

  • nginx 优化

    2.1 预备知识

    web服务器: lnmt
    java
    tomcat
    resin
    weblogic (Oracle 配置oracle数据库)

​ LNMT (java )
​ tomcat
​ resin
​ jboss
​ weblogic (配合oracle数据库)

JVM java virtual machine java虚拟机
1份代码 想在不同的系统使用
java 程序代码 运行在java虚拟机中 只要系统能有java环境(java虚
拟机) 就可以运行代码
1份代码 处处使用问题 代码可移植性
对于 java虚拟机 一般关注 内存使用情况
JDK
java development kit java开发环境
JRE
java runtime environment java运行环境

quicker_0666f3ad-ef42-48d5-b882-c6d86ea0727a.png

2.2 环境准备 与 部署

webjdk tomcat10.0.0.71172.16.17
  • jdk tomcat版本选择

  • jdk 版本 一般根据开发使用的版本为准 1.8.0

    • jdk(Oracle官方)

      • rpm包安装
      • 二进制包(软件绿色版)
      • 源码 (编译安装)
    • OpenJDK Linuxyum

  • tomcat 9.0 8.5 8.0 7.x

    • apache-tomcat
#web01 
##jdk
#各种版本:
https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/
####部署 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
[root@oldboy-tomcat ~]# ll /app
total 0
lrwxrwxrwx 1 root root  18 Feb  7 10:26 jdk ->
/app/jdk1.8.0_241/
drwxr-xr-x 7 10143 10143 245 Dec 11 18:39 jdk1.8.0_241
drwxr-xr-x 2 root root  75 Feb  7 10:13 tools
####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/li
b:$JAVA_HOME/lib/tools.jar
export TOMCAT_HOME=/app/tomcat
EOF
[root@oldboy-tomcat ~]# . /etc/profile
#检查 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)
#部署 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
##检查 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
Using CLASSPATH:   
/app/tomcat/bin/bootstrap.jar:/app/tomcat/bin/tomcat-
juli.jar
Server version: Apache Tomcat/8.5.50
Server built:  Dec 7 2019 19:19:46 UTC
Server number:  8.5.50.0
OS Name:    Linux
OS Version:   4.18.0-80.11.2.el8_0.x86_64
Architecture:  amd64
JVM Version:   1.8.0_241-b07
JVM Vendor:   Oracle Corporation

2.3 Tomcat服务管理

2.3.1 tomcat 相关命令

bin目录含义主要命令
/app/tomcat/bintomcat管理命令目录startup.sh 启动tomcat
shutdown.sh 关闭tomcat
version.sh # 部署完成之后检查jdk与tomcat
catalina.sh # tomcat核心脚本
startup shutdown 都会调用这个脚本
#配置 java启动参数 ,tomcat远程管理 配置jvm参数
[root@web01 tools]# #/application/tomcat/bin/startup.sh
[root@web01 tools]#
#/application/tomcat/bin/catalina.sh start

[root@web01 tools]# /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/tom
cat/bin/tomcat-juli.jar
Tomcat started.
[root@web01 tools]# ss -lntup|grep tomcat

[root@web01 tools]# ss -lntup|grep java
tcp  LISTEN   0    100   :::8009      
  :::*          users:
(("java",pid=58497,fd=51))
tcp  LISTEN   0    100   :::8080      
  :::*          users:
(("java",pid=58497,fd=46))
tcp  LISTEN   0    1   ::ffff:127.0.0.1:8005
        :::*          users:
(("java",pid=58497,fd=66))
[root@web01 tools]# ps -ef |grep java
root    58497    1  2 12:08 pts/0   00:00:02
/application/jdk/bin/java -
Djava.util.logging.config.file=/application/tomcat/con
f/logging.properties -
Djava.util.logging.manager=org.apache.juli.ClassLoader
LogManager -
Djava.endorsed.dirs=/application/tomcat/endorsed -
classpath
/application/tomcat/bin/bootstrap.jar:/application/tom
cat/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    58547  58190  0 12:09 pts/0   00:00:00 grep
--color=auto java
[root@web01 tools]#
  • web访问 10.0.0.7:8080

在这里插入图片描述

2.3.2 Tomcat目录结构

目录含义
conf/tomcat 配置文件
server.xml #nginx.conf 主配置文件
web.xml #补充 额外功能
tomcat-user.xml #tomcat管理端配置文件 用户名 和 密码
log日志
catalina.out #tomcat最全日志 查看 error startup 启动的时间
catalina.2019-12-16.log #catalina.out的切割日志
localhost_access_log.2019-12-16.txt #tomcat acccess.log 访问日志
webappstomcat站点目录 nginx html
[root@web01 tomcat]# ll
total 92
drwxr-xr-x 2 root root  4096 Dec 16 12:01 bin 
drwxr-xr-x 3 root root  198 Dec 16 12:08 conf
drwxr-xr-x 2 root root  4096 Dec 16 12:01 lib   #库文
件  tomcat插件
drwxr-xr-x 2 root root  197 Dec 16 12:08 logs
-rw-r--r-- 1 root root  1444 Sep 28  2015 NOTICE
-rw-r--r-- 1 root root  6741 Sep 28  2015 RELEASE-
NOTES
-rw-r--r-- 1 root root 16204 Sep 28  2015 RUNNING.txt
drwxr-xr-x 2 root root   30 Dec 16 12:01 temp
drwxr-xr-x 7 root root   81 Sep 28  2015 webapps
drwxr-xr-x 3 root root   22 Dec 16 12:08 work

2.4 Tomcat管理端

  • 搭建与测试的时候 开启管理端 进行调试 开启管理端
  • 生产环境中 关闭管理端
  • tomcat 8.5
  • conf/tomcat-user.xml

在这里插入图片描述

[root@web01 conf]# cat tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users xmlns="http://tomcat.apache.org/xml"
     
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     
xsi:schemaLocation="http://tomcat.apache.org/xml
tomcat-users.xsd"
       version="1.0">
<role rolename="admin-gui"/>
<role rolename="manager-gui"/>
<role rolename="host-gui"/>
<user username="tomcat" password="tomcat"
roles="admin-gui,manager-gui,host-gui"/>
</tomcat-users>
[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/tom
cat/bin/tomcat-juli.jar
[root@web01 conf]# ss -lntup |grep java
[root@web01 conf]# ps -ef |grep java

root    59832  58190  0 15:10 pts/0   00:00:00 grep
--color=auto java
[root@web01 conf]#
[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/tom
cat/bin/tomcat-juli.jar
Tomcat started.
  • 注意:tomcat 8.5 对管理端限制更严格
  • 要配置tomcat-user.xml之外
  • 还限制 只能在本地使用127.0.0.1 访问管理的
#解除限制
[root@oldboy-tomcat tomcat]# find -type f -name
"*.xml" |xargs grep '127'
./webapps/host-manager/META-INF/context.xml:    
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
./webapps/manager/META-INF/context.xml:    
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
#\d perl正则 数据
#修改两个文件 xml 把127 替换为 \d+
sed -i.bak 's#127#\\d+#g'  ./webapps/host-
manager/META-INF/context.xml ./webapps/manager/META-
INF/context.xml

在这里插入图片描述
在这里插入图片描述

2.5 tomcat日志与进行信息

2.5.1 进程信息

[root@oldboy-tomcat ~]# ps -ef |grep java
root    4112   1  1 11:43 pts/1   00:00:15
/app/jdk/bin/java -
Djava.util.logging.config.file=/app/tomcat/conf/loggin
g.properties -
Djava.util.logging.manager=org.apache.juli.ClassLoader
LogManager -Djdk.tls.ephemeralDHKeySize=2048 -
Djava.protocol.handler.pkgs=org.apache.catalina.webres
ources -
Dorg.apache.catalina.security.SecurityListener.UMASK=0
027 -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    4199  4175  0 11:59 pts/0   00:00:00 grep -
-color=auto java
[root@oldboy-tomcat ~]#
/app/tomcat/bin/startup.sh
/app/jdk/bin/java
-
Djava.util.logging.config.file=/app/tomcat/conf/loggin
g.properties
-
Djava.util.logging.manager=org.apache.juli.ClassLoader
LogManager
-Djdk.tls.ephemeralDHKeySize=2048
-
Djava.protocol.handler.pkgs=org.apache.catalina.webres
ources
-
Dorg.apache.catalina.security.SecurityListener.UMASK=0
027
-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
/app/tomcat01
/app/tomcat02

2.5.2 Tomcat日志

catalina.out
#error 错误
#startup 或 finished 启动所需的时间
07-Feb-2020 12:03:16.039 INFO [main]
org.apache.catalina.core.StandardServer.await A valid
shutdown command was received via the shutdown port.
Stopping the Server instance.
07-Feb-2020 12:03:16.039 INFO [main]
org.apache.coyote.AbstractProtocol.pause Pausing
ProtocolHandler ["http-nio-8080"]
07-Feb-2020 12:03:16.046 INFO [main]
org.apache.coyote.AbstractProtocol.pause Pausing
ProtocolHandler ["ajp-nio-8009"]
07-Feb-2020 12:03:16.051 INFO [main]
org.apache.catalina.core.StandardService.stopInternal
Stopping service [Catalina]
07-Feb-2020 12:03:16.093 INFO [main]
org.apache.coyote.AbstractProtocol.stop Stopping
ProtocolHandler ["http-nio-8080"]
07-Feb-2020 12:03:16.098 INFO [main]
org.apache.coyote.AbstractProtocol.stop Stopping
ProtocolHandler ["ajp-nio-8009"]
07-Feb-2020 12:03:16.100 INFO [main]
org.apache.coyote.AbstractProtocol.destroy Destroying
ProtocolHandler ["http-nio-8080"]
07-Feb-2020 12:03:16.101 INFO [main]
org.apache.coyote.AbstractProtocol.destroy Destroying
ProtocolHandler ["ajp-nio-8009"]

07-Feb-2020 12:04:58.247 INFO [main]
org.apache.catalina.startup.VersionLoggerListener.log
Server version name:  Apache Tomcat/8.5.50
07-Feb-2020 12:04:58.251 INFO [main]
org.apache.catalina.startup.VersionLoggerListener.log
Server built:     Dec 7 2019 19:19:46 UTC
07-Feb-2020 12:04:58.251 INFO [main]
org.apache.catalina.startup.VersionLoggerListener.log
Server version number: 8.5.50.0
07-Feb-2020 12:04:58.251 INFO [main]
org.apache.catalina.startup.VersionLoggerListener.log
OS Name:        Linux
07-Feb-2020 12:04:58.251 INFO [main]
org.apache.catalina.startup.VersionLoggerListener.log
OS Version:       4.18.0-80.11.2.el8_0.x86_64
07-Feb-2020 12:04:58.252 INFO [main]
org.apache.catalina.startup.VersionLoggerListener.log
Architecture:     amd64
07-Feb-2020 12:04:58.252 INFO [main]
org.apache.catalina.startup.VersionLoggerListener.log
Java Home:       /app/jdk1.8.0_241/jre
07-Feb-2020 12:04:58.252 INFO [main]
org.apache.catalina.startup.VersionLoggerListener.log
JVM Version:      1.8.0_241-b07
07-Feb-2020 12:04:58.252 INFO [main]
org.apache.catalina.startup.VersionLoggerListener.log
JVM Vendor:      Oracle Corporation
07-Feb-2020 12:04:58.252 INFO [main]
org.apache.catalina.startup.VersionLoggerListener.log
CATALINA_BASE:     /app/apache-tomcat-8.5.50

07-Feb-2020 12:04:58.252 INFO [main]
org.apache.catalina.startup.VersionLoggerListener.log
CATALINA_HOME:     /app/apache-tomcat-8.5.50
07-Feb-2020 12:04:58.252 INFO [main]
org.apache.catalina.startup.VersionLoggerListener.log
Command line argument: -
Djava.util.logging.config.file=/app/tomcat/conf/loggin
g.properties
07-Feb-2020 12:04:58.252 INFO [main]
org.apache.catalina.startup.VersionLoggerListener.log
Command line argument: -
Djava.util.logging.manager=org.apache.juli.ClassLoader
LogManager
07-Feb-2020 12:04:58.252 INFO [main]
org.apache.catalina.startup.VersionLoggerListener.log
Command line argument: -
Djdk.tls.ephemeralDHKeySize=2048
07-Feb-2020 12:04:58.252 INFO [main]
org.apache.catalina.startup.VersionLoggerListener.log
Command line argument: -
Djava.protocol.handler.pkgs=org.apache.catalina.webres
ources
07-Feb-2020 12:04:58.252 INFO [main]
org.apache.catalina.startup.VersionLoggerListener.log
Command line argument: -
Dorg.apache.catalina.security.SecurityListener.UMASK=0
027
07-Feb-2020 12:04:58.252 INFO [main]
org.apache.catalina.startup.VersionLoggerListener.log
Command line argument: -Dignore.endorsed.dirs=
07-Feb-2020 12:04:58.252 INFO [main]
org.apache.catalina.startup.VersionLoggerListener.log
Command line argument: -Dcatalina.base=/app/tomcat
07-Feb-2020 12:04:58.252 INFO [main]
org.apache.catalina.startup.VersionLoggerListener.log
Command line argument: -Dcatalina.home=/app/tomcat
07-Feb-2020 12:04:58.252 INFO [main]
org.apache.catalina.startup.VersionLoggerListener.log
Command line argument: -
Djava.io.tmpdir=/app/tomcat/temp

07-Feb-2020 12:04:58.252 INFO [main]
org.apache.catalina.core.AprLifecycleListener.lifecycl
eEvent The APR based Apache Tomcat Native library
which allows optimal performance in production
environments was not found on the java.library.path:
[/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/
usr/lib]
07-Feb-2020 12:04:58.346 INFO [main]
org.apache.coyote.AbstractProtocol.init Initializing
ProtocolHandler ["http-nio-8080"]
07-Feb-2020 12:04:58.361 INFO [main]
org.apache.tomcat.util.net.NioSelectorPool.getSharedSe
lector Using a shared selector for servlet write/read
07-Feb-2020 12:04:58.375 INFO [main]
org.apache.coyote.AbstractProtocol.init Initializing
ProtocolHandler ["ajp-nio-8009"]
07-Feb-2020 12:04:58.376 INFO [main]
org.apache.tomcat.util.net.NioSelectorPool.getSharedSe
lector Using a shared selector for servlet write/read
07-Feb-2020 12:04:58.377 INFO [main]
org.apache.catalina.startup.Catalina.load
Initialization processed in 409 ms
07-Feb-2020 12:04:58.395 INFO [main]
org.apache.catalina.core.StandardService.startInternal
Starting service [Catalina]
07-Feb-2020 12:04:58.395 INFO [main]
org.apache.catalina.core.StandardEngine.startInternal
Starting Servlet Engine: Apache Tomcat/8.5.50
07-Feb-2020 12:04:58.401 INFO [localhost-startStop-1]
org.apache.catalina.startup.HostConfig.deployDirectory
Deploying web application directory [/app/apache-
tomcat-8.5.50/webapps/ROOT]
07-Feb-2020 12:04:58.603 INFO [localhost-startStop-1]
org.apache.catalina.startup.HostConfig.deployDirectory
Deployment of web application directory [/app/apache-
tomcat-8.5.50/webapps/ROOT] has finished in [202] ms
07-Feb-2020 12:04:58.603 INFO [localhost-startStop-1]
org.apache.catalina.startup.HostConfig.deployDirectory
Deploying web application directory [/app/apache-
tomcat-8.5.50/webapps/docs]

07-Feb-2020 12:04:58.615 INFO [localhost-startStop-1]
org.apache.catalina.startup.HostConfig.deployDirectory
Deployment of web application directory [/app/apache-
tomcat-8.5.50/webapps/docs] has finished in [12] ms
07-Feb-2020 12:04:58.615 INFO [localhost-startStop-1]
org.apache.catalina.startup.HostConfig.deployDirectory
Deploying web application directory [/app/apache-
tomcat-8.5.50/webapps/examples]
07-Feb-2020 12:04:58.778 INFO [localhost-startStop-1]
org.apache.catalina.startup.HostConfig.deployDirectory
Deployment of web application directory [/app/apache-
tomcat-8.5.50/webapps/examples] has finished in [163]
ms
07-Feb-2020 12:04:58.778 INFO [localhost-startStop-1]
org.apache.catalina.startup.HostConfig.deployDirectory
Deploying web application directory [/app/apache-
tomcat-8.5.50/webapps/host-manager]
07-Feb-2020 12:04:58.862 INFO [localhost-startStop-1]
org.apache.catalina.startup.HostConfig.deployDirectory
Deployment of web application directory [/app/apache-
tomcat-8.5.50/webapps/host-manager] has finished in
[84] ms
07-Feb-2020 12:04:58.863 INFO [localhost-startStop-1]
org.apache.catalina.startup.HostConfig.deployDirectory
Deploying web application directory [/app/apache-
tomcat-8.5.50/webapps/manager]
07-Feb-2020 12:04:58.876 INFO [localhost-startStop-1]
org.apache.catalina.startup.HostConfig.deployDirectory
Deployment of web application directory [/app/apache-
tomcat-8.5.50/webapps/manager] has finished in [13] ms
07-Feb-2020 12:04:58.877 INFO [main]
org.apache.coyote.AbstractProtocol.start Starting
ProtocolHandler ["http-nio-8080"]
07-Feb-2020 12:04:58.890 INFO [main]
org.apache.coyote.AbstractProtocol.start Starting
ProtocolHandler ["ajp-nio-8009"]
07-Feb-2020 12:04:58.893 INFO [main]
org.apache.catalina.startup.Catalina.start Server
startup in 516 ms


  • 访问日志
223.104.2.165 - - [07/Feb/2020:12:10:00 +0800] "GET
/tomcat.css HTTP/1.1" 200 5581
223.104.2.165 - - [07/Feb/2020:12:10:00 +0800] "GET
/tomcat.png HTTP/1.1" 200 5103
223.104.2.165 - - [07/Feb/2020:12:10:00 +0800] "GET
/bg-nav.png HTTP/1.1" 200 1401
223.104.2.165 - - [07/Feb/2020:12:10:00 +0800] "GET
/asf-logo-wide.svg HTTP/1.1" 200 27235
223.104.2.165 - - [07/Feb/2020:12:10:00 +0800] "GET
/bg-upper.png HTTP/1.1" 200 3103
223.104.2.165 - - [07/Feb/2020:12:10:00 +0800] "GET
/bg-middle.png HTTP/1.1" 200 1918
223.104.2.165 - - [07/Feb/2020:12:10:00 +0800] "GET
/bg-button.png HTTP/1.1" 200 713
223.104.2.165 - - [07/Feb/2020:12:10:00 +0800] "GET
/favicon.ico HTTP/1.1" 200 21630
223.104.2.165 - - [07/Feb/2020:12:10:06 +0800] "GET /
HTTP/1.1" 200 11215
223.104.2.165 - - [07/Feb/2020:12:10:06 +0800] "GET
/tomcat.css HTTP/1.1" 200 5581
223.104.2.165 - - [07/Feb/2020:12:10:06 +0800] "GET
/tomcat.png HTTP/1.1" 200 5103
223.104.2.165 - - [07/Feb/2020:12:10:06 +0800] "GET
/bg-nav.png HTTP/1.1" 200 1401
223.104.2.165 - - [07/Feb/2020:12:10:06 +0800] "GET
/asf-logo-wide.svg HTTP/1.1" 200 27235
223.104.2.165 - - [07/Feb/2020:12:10:06 +0800] "GET
/bg-upper.png HTTP/1.1" 200 3103

223.104.2.165 - - [07/Feb/2020:12:10:06 +0800] "GET
/bg-button.png HTTP/1.1" 200 713
223.104.2.165 - - [07/Feb/2020:12:10:06 +0800] "GET
/bg-middle.png HTTP/1.1" 200 1918
223.104.2.165 - - [07/Feb/2020:12:10:06 +0800] "GET
/favicon.ico HTTP/1.1" 200 21630
223.104.2.165 - - [07/Feb/2020:12:10:11 +0800] "GET /
HTTP/1.1" 200 11215
223.104.2.165 - - [07/Feb/2020:12:10:11 +0800] "GET
/tomcat.css HTTP/1.1" 304 -
223.104.2.165 - - [07/Feb/2020:12:10:12 +0800] "GET
/tomcat.png HTTP/1.1" 304 -
223.104.2.165 - - [07/Feb/2020:12:10:12 +0800] "GET
/asf-logo-wide.svg HTTP/1.1" 304 -
223.104.2.165 - - [07/Feb/2020:12:10:12 +0800] "GET
/bg-nav.png HTTP/1.1" 304 -
223.104.2.165 - - [07/Feb/2020:12:10:12 +0800] "GET
/bg-upper.png HTTP/1.1" 304 -
223.104.2.165 - - [07/Feb/2020:12:10:12 +0800] "GET
/bg-button.png HTTP/1.1" 304 -
223.104.2.165 - - [07/Feb/2020:12:10:12 +0800] "GET
/bg-middle.png HTTP/1.1" 304 -

  • catalina.out 和 catalina.日期.log
  • catalina.out在被切割后 内容不会被清空

2.5 Tomcat配置文件

#server.xml
<Server port="8005" shutdown="SHUTDOWN">
###tomcat shutdown端口 连接到这个端口 输入暗号 tomcat关闭
<GlobalNamingResources>
 <!-- Editable user database that can also be used
by
    UserDatabaseRealm to authenticate users
  -->
    #用户管理端 认证模式 用户名密码模式
   <Resource name="UserDatabase" auth="Container"
       type="org.apache.catalina.UserDatabase"
       description="User database that can be
updated and saved"
     
 factory="org.apache.catalina.users.MemoryUserDatabase
Factory"
       pathname="conf/tomcat-users.xml" />  #用
户管理配置文件
</GlobalNamingResources>
#tomcat web端口
 <Connector port="8080" protocol="HTTP/1.1"
       connectionTimeout="20000"  #ms
       redirectPort="8443" />
#tomcat与apache 连接使用的端口 如果不使用apache 则可以注释
 <Connector port="8009" protocol="AJP/1.3"
redirectPort="8443" />
提问:tomcat默认有几个端口 及作用 ?
#配置 tomcat 虚拟主机的内容
Nginx      tomcat
Server_name   Host name 域名
root      appBase  站点目录


#自动解压
unpackWARs="true"
#自动部署
autoDeploy="true"
  <Host name="localhost"  appBase="webapps"
      unpackWARs="true" autoDeploy="true">
   <!-- SingleSignOn valve, share authentication
between web applications
      Documentation at: /docs/config/valve.html
-->
   <!--
   <Valve
className="org.apache.catalina.authenticator.SingleSig
nOn" />
    -->
   <!-- Access log processes all example.
      Documentation at: /docs/config/valve.html
      Note: The pattern used is equivalent to
using pattern="common" -->
      #tomcat 访问日志的格式
   <Valve
className="org.apache.catalina.valves.AccessLogValve"
directory="logs
"
       prefix="localhost_access_log"
suffix=".txt"
       #prefix日志的前缀       #日志后缀
       pattern="%h %l %u %t &quot;%r&quot; %s
%b" />
  </Host>

2.6 tomcat 部署应用及方式

  • 如果开发给你的是war包 则把war包放入到 tomcat webapps 自动
    解压 自动部署
  • 如果开发给你的是jar包 相当于把tomcat放入到jar中 java -jar xxxx.jar
环境准备
web01tomcat
db01数据库
#java wordpress jpress
#
[root@web01 webapps] # /application/tomcat/bin/starup.sh
[root@web01 webapps] # ll

#数据库
MariaDB [(none)]> show databases;
+--------------------+
| Database      |
+--------------------+
| information_schema |
| mysql       |
| performance_schema |
| test        |
+--------------------+
4 rows in set (0.00 sec)
#创建数据库 jpress
MariaDB [(none)]> create database jpress charset
utf8;
Query OK, 1 row affected (0.00 sec)
#添加用户
MariaDB [(none)]> grant all on jpress.* to
 'jpress'@'172.16.1.%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
#grant 授权 添加用户
grant all   on jpress.* to  'jpress'@'172.16.1.%'
identified by '123456';
  所有权限 在  jpress数据库.中所有表
172.16.1.7  #精确   
172.16.1.%  #局域网访问
localhost  #本地访问
%      #所有
MariaDB [(none)]> grant all on jpress.* to
 'jpress'@'172.16.1.%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> grant all   on jpress.* to
 'jpress'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
#进行测试 web01
mysql  -ujpress -p123456 -h 172.16.1.61
#排坑  删除MySQL中空用户
MariaDB [(none)]> select user,host from mysql.user;
+--------+------------+
| user  | host    |
+--------+------------+
| root  | 127.0.0.1 |
| jpress | 172.16.1.% |
| root  | ::1    |
|    | localhost |
| jpress | localhost |
| root  | localhost |
|    | m01    |
| root  | m01    |
+--------+------------+
8 rows in set (0.00 sec)
MariaDB [(none)]> drop user ''@'localhost';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> drop user ''@'m01';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> select user,host from mysql.user;
+--------+------------+
| user  | host    |
+--------+------------+
| root  | 127.0.0.1 |
| jpress | 172.16.1.% |
| root  | ::1    |
| jpress | localhost |
| root  | localhost |
| root  | m01    |
+--------+------------+
6 rows in set (0.00 sec)
#扩展
MariaDB [(none)]> show create database jpress ;
+----------+------------------------------------------
-----------------------+
| Database | Create Database             
           |
+----------+------------------------------------------
-----------------------+
| jpress  | CREATE DATABASE `jpress` /*!40100 DEFAULT
CHARACTER SET utf8 */ |
+----------+------------------------------------------
-----------------------+
1 row in set (0.00 sec)
MariaDB [(none)]> show create database test ;
+----------+------------------------------------------
-----------------------+
| Database | Create Database             
           |
+----------+------------------------------------------
-----------------------+
| test   | CREATE DATABASE `test` /*!40100 DEFAULT
CHARACTER SET latin1 */ |
+----------+------------------------------------------
-----------------------+
1 row in set (0.00 sec)

  • MySQL语句 SQL

  • 查 :

    • show databases;

    • show tables from db;

    • select user,host from mysql.user;

  • 增加

    • 建库: create database jpress charset utf8;
    • 添加用户: grant all on jpress.* to ‘jpress’@‘172.16.1.%’ identified by ‘123456’;
    • 删除
      • drop database db;
      • drop user jpress@localhost ;
  • 备份

    • mysqldump
  • 安装 jpress过程

安装向导 配置 登录管理… 不做一一赘述

  • web页面访问

    • 10.0.0.7:8080/jpress/ 首页页面
    • 10.0.0.7:8080/jpress/admin/ 后台管理页面
  • jpress 连接哪里个数据库

    [root@web01 classes]# cat
    /application/tomcat/webapps/jpress/WEB-
    INF/classes/db.properties
    #Auto create by JPress
    #Tue Dec 17 09:42:09 CST 2019
    db_name=jpress
    db_host_port=3306
    db_tablePrefix=jpress_
    db_host=172.16.1.61
    db_password=123456
    db_user=jpress
    
  • wordpress wp-config.php

  • 用户上传目录及数据库内容查看

    [root@web01 ~]# cd /application/tomcat/webapps/
    [root@web01 webapps]# ll jpress/attachment/20191217/
    total 372
    -rw-r--r-- 1 root root  4780 Dec 17 10:14
    37b4d16bb21148f6b7a077420d28b735_240x140.jpg
    -rw-r--r-- 1 root root  9366 Dec 17 10:14
    37b4d16bb21148f6b7a077420d28b735_300x300.jpg
    -rw-r--r-- 1 root root  13882 Dec 17 10:14
    37b4d16bb21148f6b7a077420d28b735_600x300.jpg
    -rw-r--r-- 1 root root  13644 Dec 17 10:14
    37b4d16bb21148f6b7a077420d28b735_780x240.jpg
    -rw-r--r-- 1 root root 114957 Dec 17 10:14
    37b4d16bb21148f6b7a077420d28b735.jpg
    -rw-r--r-- 1 root root  9578 Dec 17 10:17
    418a1d7bfb9543168f748491bae39ef9_240x140.jpg
    -rw-r--r-- 1 root root  18464 Dec 17 10:17
    418a1d7bfb9543168f748491bae39ef9_300x300.jpg
    -rw-r--r-- 1 root root  32573 Dec 17 10:17
    418a1d7bfb9543168f748491bae39ef9_600x300.jpg
    -rw-r--r-- 1 root root  31151 Dec 17 10:17
    418a1d7bfb9543168f748491bae39ef9_780x240.jpg
    -rw-r--r-- 1 root root 108261 Dec 17 10:17
    418a1d7bfb9543168f748491bae39ef9.jpg
    select * from jpress.jpress_content limit 1 \G
    

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

模式
bioblocking
io
tomcat 7及之前, 同步模型 阻塞一个线程处理一个请求,缺点:并发量高时,线程数较多,浪费资源。
nionew iotomcat 8及以后的工作模式 异步 非阻塞nio1(默认的) nio2 可以通过少量的线程处理大量的请求
aprApache
Portable
Runtim
Tomcat对静态文件的处理性能。
Tomcat apr也是在Tomcat上运
行高并发应用的首选模式
  • nio

    protocol="org.apache.coyote.http11.Http11Nio2Protocol"
    #server.xml 中 修改 8080
     <Connector port="8080"
    protocol="org.apache.coyote.http11.Http11Nio2Protocol"
           connectionTimeout="20000"
           redirectPort="8443" />
    
  • 查看修改结果-catalina.out日志

    17-Dec-2019 10:46:33.106 INFO [main]
    org.apache.coyote.AbstractProtocol.start Starting
    ProtocolHandler ["http-nio2-8080"]
    17-Dec-2019 10:46:33.123 INFO [main]
    org.apache.coyote.AbstractProtocol.start Starting
    ProtocolHandler ["ajp-nio-8009"]
    17-Dec-2019 10:46:33.145 INFO [main]
    org.apache.catalina.startup.Catalina.start Server
    startup in 5019 ms
    
  • 查看修改结果-tomcat管理端

在这里插入图片描述

  • apr
#安装apr环境
yum -y install apr apr-devel tomcat-native
#修改8080&8009端口对应的server.xml
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
把Nio2 修改为Apr
protocol="org.apache.coyote.http11.Http11AprProtocol"
17-Dec-2019 10:59:41.605 INFO [main]
org.apache.coyote.AbstractProtocol.start Starting
ProtocolHandler ["http-apr-8080"]
17-Dec-2019 10:59:41.619 INFO [main]
org.apache.coyote.AbstractProtocol.start Starting
ProtocolHandler ["ajp-apr-8009"]
17-Dec-2019 10:59:41.621 INFO [main]
org.apache.catalina.startup.Catalina.start Server
startup in 3982 ms

在这里插入图片描述

linux必知必会压缩工具
tarzcf/xf/tf / -C
zipzip/unzip
gzipgzip/gzip -d

2.8 tomcat 多实例

  • 在1台服务器上面运行多个tomcat
  • 注意事项: 端口不同与路径不同.
[root@web01 tools]# tar xf apache-tomcat-8.0.27.tar.gz
[root@web01 tools]# ll
total 207236
drwxr-xr-x 9 root  root      160 Dec 17 11:10
apache-tomcat-8.0.27
-rw-r--r-- 1 root  root    9128610 Oct  5  2015
apache-tomcat-8.0.27.tar.gz
-rw-r--r-- 1 root  root   181238643 Oct  5  2015
jdk-8u60-linux-x64.tar.gz
-rw-r--r-- 1 root  root   20797013 Mar  3  2017
jpress-web-newest.war
drwxr-xr-x 9 linux66 linux66    186 Nov  5 19:01
nginx-1.16.1
-rw-r--r-- 1 root  root    1032630 Aug 14 01:01
nginx-1.16.1.tar.gz
-rw-r--r-- 1 root  root      420 Dec 16 11:55
profile
[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/
[root@web01 tools]# ll /application/
total 0
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/conf/server.xml
[root@web01 application]# sed -i 's#8005#8006#g'
tomcat8081/conf/server.xml
[root@web01 application]# sed -i 's#8009#8010#g'
tomcat8081/conf/server.xml
[root@web01 application]#
[root@web01 application]#
[root@web01 application]# sed -i 's#8080#8082#g'
tomcat8082/conf/server.xml
[root@web01 application]# sed -i 's#8005#8007#g'
tomcat8082/conf/server.xml
[root@web01 application]# sed -i 's#8009#8011#g'
tomcat8082/conf/server.xml
[root@web01 application]# ss -lntup |grep java
tcp  LISTEN   0    1   ::ffff:127.0.0.1:8007
        :::*          users:
(("java",pid=10089,fd=64))
tcp  LISTEN   0    100   :::8009      
  :::*          users:
(("java",pid=9859,fd=47))
tcp  LISTEN   0    100   :::8010      
  :::*          users:
(("java",pid=10059,fd=47))
tcp  LISTEN   0    100   :::8011      
  :::*          users:
(("java",pid=10089,fd=47))
tcp  LISTEN   0    100   :::8080      
  :::*          users:
(("java",pid=9859,fd=46))
tcp  LISTEN   0    100   :::8081      
  :::*          users:
(("java",pid=10059,fd=46))

tcp  LISTEN   0    100   :::8082      
  :::*          users:
(("java",pid=10089,fd=46))
tcp  LISTEN   0    1   ::ffff:127.0.0.1:8005
        :::*          users:
(("java",pid=9859,fd=67))
tcp  LISTEN   0    1   ::ffff:127.0.0.1:8006
        :::*          users:
(("java",pid=10059,fd=64))
[root@web01 application]# #curl
10.0.0.7:8081/index.jsp
[root@web01 application]# echo tomcat_8081 
>/application/tomcat8081/webapps/ROOT/index.jsp
[root@web01 application]#
[root@web01 application]# echo tomcat_8082 
>/application/tomcat8082/webapps/ROOT/index.jsp
[root@web01 application]# curl 10.0.0.7:8081
tomcat_8081
[root@web01 application]# curl 10.0.0.7:8082
tomcat_8082
[root@web01 application]# curl 10.0.0.7:808[1-2]
[1/2]: 10.0.0.7:8081 --> <stdout>
--_curl_--10.0.0.7:8081
tomcat_8081
[2/2]: 10.0.0.7:8082 --> <stdout>
--_curl_--10.0.0.7:8082
tomcat_8082

/application/jdk/bin/java -
Djava.util.logging.config.file=/application/tomcat8081
/conf/logging.properties -
Djava.util.logging.manager=org.apache.juli.ClassLoader
LogManager -
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
/application/jdk/bin/java
-
Djava.util.logging.config.file=/application/tomcat8081
/conf/logging.properties
-
Djava.util.logging.manager=org.apache.juli.ClassLoader
LogManager
-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

2.9 tomcat 监控功能

  • 通过监控软件 可以监控 tomcat状态(jvm状态)
  • 监控方法:
    1. 通过命令/脚本查看
    2. 开启tomcat监控功能 再让zabbix监控

2.9.1 命令

# ps
# jps java ps 命令
[root@web01 ~]# jps -lvm
9859 org.apache.catalina.startup.Bootstrap start -
Djava.util.logging.config.file=/application/tomcat/con
f/logging.properties -
Djava.util.logging.manager=org.apache.juli.ClassLoader
LogManager -
Djava.endorsed.dirs=/application/tomcat/endorsed -
Dcatalina.base=/application/tomcat -
Dcatalina.home=/application/tomcat -
Djava.io.tmpdir=/application/tomcat/temp
10089 org.apache.catalina.startup.Bootstrap start -
Djava.util.logging.config.file=/application/tomcat8082
/conf/logging.properties -
Djava.util.logging.manager=org.apache.juli.ClassLoader
LogManager -
Djava.endorsed.dirs=/application/tomcat8082/endorsed -
Dcatalina.base=/application/tomcat8082 -
Dcatalina.home=/application/tomcat8082 -
Djava.io.tmpdir=/application/tomcat8082/temp
10059 org.apache.catalina.startup.Bootstrap start -
Djava.util.logging.config.file=/application/tomcat8081
/conf/logging.properties -
Djava.util.logging.manager=org.apache.juli.ClassLoader
LogManager -
Djava.endorsed.dirs=/application/tomcat8081/endorsed -
Dcatalina.base=/application/tomcat8081 -
Dcatalina.home=/application/tomcat8081 -
Djava.io.tmpdir=/application/tomcat8081/temp
10415 sun.tools.jps.Jps -lvm -
Denv.class.path=.:/application/jdk/lib:/application/jd
k/jre/lib:/application/jdk/lib/tools.jar -
Dapplication.home=/application/jdk1.8.0_60 -Xms8m
#脚本 show-busy-java-threads.sh
##根据java线程繁忙状态排序
线程 进程 DJ
进程 在内存中创建空间
线程 实际处理用户请求
pstree
     ├─java(10522)─┬─{java}(10523)
     │       ├─{java}(10524)
     │       ├─{java}(10525)
     │       ├─{java}(10526)
     │       ├─{java}(10527)
     │       ├─{java}(10528)
     │       ├─{java}(10529)
     │       ├─{java}(10530)
     │       ├─{java}(10531)
     │       ├─{java}(10532)
     │       ├─{java}(10533)
     │       ├─{java}(10534)
     │       └─{java}(10535)
[root@web01 ~]# sh show-busy-java-threads.sh
[1] Busy(14.8%) thread(10528/0x2920) stack of java
process(10522) under user(root):
"C2 CompilerThread0" #5 daemon prio=9 os_prio=0
tid=0x00007fe9700ae000 nid=0x2920 waiting on condition
[0x0000000000000000]
 java.lang.Thread.State: RUNNABLE
[2] Busy(2.0%) thread(10529/0x2921) stack of java
process(10522) under user(root):
"C1 CompilerThread1" #6 daemon prio=9 os_prio=0
tid=0x00007fe9700b0800 nid=0x2921 waiting on condition
[0x0000000000000000]
 java.lang.Thread.State: RUNNABLE
[3] Busy(2.0%) thread(10523/0x291b) stack of java
process(10522) under user(root):
"main" #1 prio=5 os_prio=0 tid=0x00007fe970009000
nid=0x291b runnable [0x00007fe977a0d000]
 java.lang.Thread.State: RUNNABLE
at java.net.PlainSocketImpl.socketAccept(NativeMethod)
at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:409)
at java.net.ServerSocket.implAccept(ServerSocket.java:545)
at java.net.ServerSocket.accept(ServerSocket.java:513)
at org.apache.catalina.core.StandardServer.await(StandardServer.java:446)
at org.apache.catalina.startup.Catalina.await(Catalina.java:713)
at org.apache.catalina.startup.Catalina.start(Catalina.java:659)
at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMeth
odAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Delega
tingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at
org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
at
org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
[4] Busy(0.7%) thread(10524/0x291c) stack of java
process(10522) under user(root):
"VM Thread" os_prio=0 tid=0x00007fe97006d800
nid=0x291c runnable
[5] Busy(0.0%) thread(10565/0x2945) stack of java
process(10522) under user(root):
"ajp-apr-8009-AsyncTimeout" #42 daemon prio=5
os_prio=0 tid=0x00007fe97051e800 nid=0x2945 waiting on
condition [0x00007fe937ffe000]
 java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at
org.apache.tomcat.util.net.AbstractEndpoint$AsyncTimeo
ut.run(AbstractEndpoint.java:129)
at java.lang.Thread.run(Thread.java:745)

线程是指进程内的一个执行单元,
进程
进程拥有自已独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。
线程
线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统
调度
协程和线程
协程避免了无意义的调度,由此可以提高性能:但同时协程也失去了线程使
用多CPU的能力
进程与线程的区别
(1)地址空间: 线程是进程内的一个执行单位,进程内至少有一个线程,他们共享进程的地址空间,而进程有白己独立的地址空间
(2)资源拥有: 进程是资源分配和拥有的单位,同一个进程内线程共享进程的资源
(3)线程是处理器调度的基本单位,但进程不是
(4)二者均可并发执行
(5)每个独立的线程有一个程序运行的入口

2.9.2 开启tomcat监控功能

修改 tomcat/bin/catalina.sh 
CATALINA_OPTS java内置变量 修改java启动参数(tomcat)
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 10.0.0.7 172.16.1.7
[root@web01 ~]# cd /application/tomcat/bin/
[root@web01 bin]# vim 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.7"
[root@web01 bin]# grep -nA6 ^\CATALINA_OPTS=
catalina.sh
99:CATALINA_OPTS="$CATALINA_OPTS        
100--Dcom.sun.management.jmxremote
101--Dcom.sun.management.jmxremote.port=12345 
102--Dcom.sun.management.jmxremote.authenticate=false
103--Dcom.sun.management.jmxremote.ssl=false
104--Djava.rmi.server.hostname=10.0.0.7"
105-
[root@web01 bin]# ps -ef |grep java
root    10522    1  0 11:57 pts/0   00:00:09
/application/jdk/bin/java -
Djava.util.logging.config.file=/application/tomcat/con
f/logging.properties -
Djava.util.logging.manager=org.apache.juli.ClassLoader
LogManager -
Djava.endorsed.dirs=/application/tomcat/endorsed -
classpath
/application/tomcat/bin/bootstrap.jar:/application/tom
cat/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    10755  7636  0 12:14 pts/0   00:00:00 grep
--color=auto java
[root@web01 bin]# ps -ef |grep java
root    10789    1 60 12:14 pts/0   00:00:04
/application/jdk/bin/java -
Djava.util.logging.config.file=/application/tomcat/con
f/logging.properties -
Djava.util.logging.manager=org.apache.juli.ClassLoader
LogManager -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/tom
cat/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    10836  7636  0 12:14 pts/0   00:00:00 grep
--color=auto java
[root@web01 bin]# ss -lntup |grep java
tcp  LISTEN   0    100   :::8009      
  :::*          users:
(("java",pid=10789,fd=51))
tcp  LISTEN   0    100   :::8080      
  :::*          users:
(("java",pid=10789,fd=50))
tcp  LISTEN   0    50    :::33427      
 :::*          users:
(("java",pid=10789,fd=21))
tcp  LISTEN   0    50    :::12345      
 :::*          users:
(("java",pid=10789,fd=20))
tcp  LISTEN   0    50    :::44771      
 :::*          users:
(("java",pid=10789,fd=19))
tcp  LISTEN   0    1   ::ffff:127.0.0.1:8005
        :::*          users:
(("java",pid=10789,fd=54))
/application/jdk/bin/java
-
Djava.util.logging.config.file=/application/tomcat/con
f/logging.properties
-
Djava.util.logging.manager=org.apache.juli.ClassLoader
LogManager
-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/tom
cat/bin/tomcat-juli.jar -
Dcatalina.base=/application/tomcat -
Dcatalina.home=/application/tomcat -
Djava.io.tmpdir=/application/tomcat/temp
org.apache.catalina.startup.Bootstrap start
  • 通过windows jconsole 连接(模拟zabbix连接) linux tomcat
    在这里插入图片描述

    在这里插入图片描述

2.10 tomcat 与 nginx

  • LNMP 原理
  • 静态资源 nginx自己处理
  • 动态资源 nginx—>php处理
  • LNMT 原理
  • Tomcat 能处理动态和静态
  • Tomcat 处理静态的能力很弱.
  • 静态资源 nginx自己处理
  • 动态资源 nginx—>tomcat处理
#模仿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;
 }
}
#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 ;
}
}

2.11 Tomcat相关故障及排错

  • tomcat(java) 服务器 运行占用大量swap 物理内存占用较少
#Linux内核参数:
/etc/sysctl.conf   #sys system  ctl control
(ctrl)
sysctl -p  #内核参数生效
vm.swappiness 控制系统是否优先使用物理内存 数越小 越优先使用物
理内存
ip_forward
#内核参数
/etc/sysctl.conf
vm.swappiness =0
net.ipv4.ip_forward=1        #开启内核转发. nat的
时候 需要配置
net.ipv4.icmp_echo_ignore_all=0   #
sysctl -p
#内核参数对应的一些文件
/proc/sys/net/ipv4/icmp_echo_ignore_all
/proc/sys/net/ipv4/ip_forward
/proc/sys/vm/swappiness
[root@web01 ~]# #net.ipv4.ip_forward=1
[root@web01 ~]# #/etc/sysctl.conf
[root@web01 ~]# cat /proc/sys/net/ipv4/ip_forward
0
[root@web01 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@web01 ~]# cat /proc/sys/net/ipv4/ip_forward
1
[root@web01 ~]#
[root@web01 ~]# #vm.swappiness
[root@web01 ~]# cat /proc/sys/vm/swappiness
30
[root@web01 ~]#
[root@web01 ~]# cat
/proc/sys/net/ipv4/icmp_echo_ignore_all
0
[root@web01 ~]# echo 1 >
/proc/sys/net/ipv4/icmp_echo_ignore_all
[root@web01 ~]# echo 0 >
/proc/sys/net/ipv4/icmp_echo_ignore_all
  • tomcat负载高
  • 排查流程
  1. vmstat /top/ps aux 找出哪个进程的问题
  2. 通过top -Hp java进程id 找出是哪个java线程的问题
  3. 问题线程的id 转换为16进制
  4. jstack (显示java 进程信息) jstack java进程id 过滤 java线程的16进制id 与开发沟通
  5. jmap (显示java jvm信息) jmap -heap java进程id 显示jvm的内存使用情况
  6. jmap (导出 jvm内存的内容 ) jmap -dump:format=b,file=/root/tomcat.bin pid
  7. 通过 mat(Eclipse Memory Analyzer Tool )分析 windows vmstat /top/ps aux tomcat: 找出这个tomcat的pid top -Hp 10789 精确的找出某个线程导致的并且能找出线程的id 10802 (10进制)转换为16进制
[root@web01 jpress]# echo 'obase=16;10802' |bc 2A32
  • jstack pid (java进程的) 然后过滤 线程16进制的id 与开发一起查看
[root@web01 jpress]# jstack 10789 |grep -i -C5
'2A32'
at
org.apache.catalina.startup.Bootstrap.start(Bootstra
p.java:351)
at
org.apache.catalina.startup.Bootstrap.main(Bootstrap
.java:485)
"VM Thread" os_prio=0 tid=0x00007fe53006d800
nid=0x2a27 runnable
"VM Periodic Task Thread" os_prio=0
tid=0x00007fe53018c000 nid=0x2a32 waiting on
condition
JNI global references: 263
#r 数字较大 意味着系统的 cpu使用率较高
#b 数字较大 意味着   磁盘io较高
[root@web01 jpress]# vmstat 1 10
procs -----------memory---------- ---swap-- -----
io---- -system-- ------cpu-----
r b  swpd  free  buff cache  si  so  bi 
bo  in  cs us sy id wa st
3  0  3592  92948    0 533296   0   0   27 
 23  91  194  0  0 99  0  0
0  0  3592  92948    0 533296   0   0   0 
 0  76  136  0  0 100  0  0
0  0  3592  92948    0 533296   0   0   0 
208  99  151  0  2 98  0  0
0  0  3592  92948    0 533296   0   0   0 
 0  72  130  0  0 100  0  0
0  0  3592  92948    0 533296   0   0   0 
 0  83  146  1  0 99  0  0
0  0  3592  92948    0 533296   0   0   0 
 0  72  129  0  0 100  0  0
0  0  3592  92948    0 533296   0   0   0 
 0  80  141  0  0 100  0  0
0  0  3592  92948    0 533296   0   0   0 
 0  99  177  0  0 100  0  0
0  0  3592  92948    0 533296   0   0   0 
 0  88  153  0  1 99  0  0
0  0  3592  92948    0 533296   0   0   0 
 0  74  133  0  0 100  0  0
  • jmap -dump 导出jvm内存内容
    在这里插入图片描述
    在这里插入图片描述

2.12 Tomcat优化

#安全优化
##1.telnet管理端口保护(强制) tomcat shutdown端口
<Server port="8527" shutdown="dangerous">
##2.ajp连接端口保护(推荐)
如果使用的apache+tomcat 修改端口
如果没有使用apache  则把这一行注释
<!--  开始        注释结束 -->
##3.禁用管理端(强制)
###1. 删除默认的{Tomcat安装目录}/conf/tomcat-users.xml文
件,重启tomcat后将会自动生成新的文件;
###2. 删除{Tomcat安装目录}/webapps下默认的所有目录和文件;
###3. 将tomcat 应用根目录配置为tomcat安装目录以外的目录;
##4.降权启动(强制)(监牢模式 keep in jail)
降权启动/监牢模式 让服务通过普通用户运行 普通用户管理.
作业. tomcat nginx 监牢模式 Linux 1-1024端口 特权端口 只
能root使用.
web 8099
upstream  web_pools {
server 10.0.0.7:8099;
server 10.0.0.8:8099;
}
##5.文件列表访问控制(强制)
nginx  网站文件列表功能 autoindex on;
tomcat 关闭
conf/web.xml
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
##6.版本信息隐藏(强制)
conf/web.xml
<error-page>
<error-code>403</error-code>
<location>/forbidden.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/notfound.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/systembusy.jsp</location>
</error-page>
##7.Server header重写(推荐)
server.xml
 <Connector port="8080"
protocol="org.apache.coyote.http11.Http11AprProtocol"
       server="nginx/1.16.1"
       connectionTimeout="20000"
       redirectPort="8443" />
##8.访问限制(可选)
allow
deny
后台管理目录  设置 权限
<Context path="" docBase="/home/work/tomcat" debug="0"
reloadable="false" crossContext="true">
<Valve
className="org.apache.catalina.valves.RemoteAddrValve"
allow="61.148.18.138,61.135.165.*" deny="*.*.*.*"/>
</Context>
##9.起停脚本权限回收
chmod 700 tomcat/bin/*.sh
##10.访问日志格式规范(推荐)
<Valve
className="org.apache.catalina.valves.AccessLogValve"
        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  记录着用户从哪里跳转过来的. 通过百度 
#性能优化
jmeter

2.13 tomcat性能优化

maxThreads="500"     #最大的线程数量 
200-400之间
       minSpareThreads="10"   #空闲时候最小的线
程数量
java压力测试工具: jmeter (需要java环境(jdk/jre))
D:\liyy\apache-jmeter-5.2.1\bin\jmeter.bat
#进行测试 基准测试 什么都没有配置的时候的结果
#修改 优化 进行测试 与基准测试进行对比

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • apr 注释掉8009 ajp
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值