文章目录
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运行环境

2.2 环境准备 与 部署
| web | jdk tomcat | 10.0.0.7 | 1172.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/bin | tomcat管理命令目录 | 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 访问日志 | |
| webapps | tomcat站点目录 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 "%r" %s
%b" />
</Host>
2.6 tomcat 部署应用及方式
- 如果开发给你的是war包 则把war包放入到 tomcat webapps 自动
解压 自动部署 - 如果开发给你的是jar包 相当于把tomcat放入到jar中 java -jar xxxx.jar
| 环境准备 | |
|---|---|
| web01 | tomcat |
| 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
| 模式 | |||
|---|---|---|---|
| bio | blocking io | tomcat 7及之前, 同步模型 阻塞 | 一个线程处理一个请求,缺点:并发量高时,线程数较多,浪费资源。 |
| nio | new io | tomcat 8及以后的工作模式 异步 非阻塞 | nio1(默认的) nio2 可以通过少量的线程处理大量的请求 |
| apr | Apache 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必知必会压缩工具 | |
|---|---|
| tar | zcf/xf/tf / -C |
| zip | zip/unzip |
| gzip | gzip/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状态)
- 监控方法:
-
- 通过命令/脚本查看
- 开启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负载高
- 排查流程
- vmstat /top/ps aux 找出哪个进程的问题
- 通过top -Hp java进程id 找出是哪个java线程的问题
- 问题线程的id 转换为16进制
- jstack (显示java 进程信息) jstack java进程id 过滤 java线程的16进制id 与开发沟通
- jmap (显示java jvm信息) jmap -heap java进程id 显示jvm的内存使用情况
- jmap (导出 jvm内存的内容 ) jmap -dump:format=b,file=/root/tomcat.bin pid
- 通过 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

3276

被折叠的 条评论
为什么被折叠?



