目录
一、tomcat 服务的目录结构解析:
Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。所以作为运维人员十分有必要了解Tomcat目录结构组成。
1、tomcat目录结构:
tomcat的目录主要有bin、conf、lib、logs、temp、webapps、work目录组成的,每一个目录的作用和用法都是不一样的。
tomcat的tar.gz包解压后的目录结构如下:
[root@VM-8-10-centos tomcat8]# ll total 112 drwxr-xr-x 2 root root 4096 Feb 22 16:17 bin drwxr-xr-x 2 root root 4096 May 19 2015 conf drwxr-xr-x 2 root root 4096 Feb 22 16:17 lib -rw-r--r-- 1 root root 56977 May 19 2015 LICENSE drwxr-xr-x 2 root root 4096 May 19 2015 logs -rw-r--r-- 1 root root 1397 May 19 2015 NOTICE -rw-r--r-- 1 root root 6741 May 19 2015 RELEASE-NOTES -rw-r--r-- 1 root root 16204 May 19 2015 RUNNING.txt drwxr-xr-x 2 root root 4096 Feb 22 16:17 temp drwxr-xr-x 7 root root 4096 May 19 2015 webapps drwxr-xr-x 2 root root 4096 May 19 2015 work
bin目录:
bin目录主要是用来存放tomcat的命令,主要有两大类,一类是以.sh结尾的(linux命令),另一类是以.bat结尾的(windows命令)。很多环境变量的设置都在此处,例如可以设置JDK路径、tomcat路径.
[root@VM-8-10-centos bin]# ls bootstrap.jar catalina-tasks.xml configtest.bat digest.bat setclasspath.sh startup.bat tomcat-native.tar.gz version.bat catalina.bat commons-daemon.jar configtest.sh digest.sh shutdown.bat startup.sh tool-wrapper.bat version.sh catalina.sh commons-daemon-native.tar.gz daemon.sh setclasspath.bat shutdown.sh tomcat-juli.jar tool-wrapper.sh
创建需要使用的文件如下:
startup.sh 用来启动tomcat服务
shutdown.sh 用来关闭tomcat服务
修改catalina.sh的JAVA_OPTS参数可以设置tomcat的内存
conf目录:
conf目录主要是用来存放tomcat的一些配置文件。
[root@VM-8-10-centos conf]# ll total 216 drwxr-xr-x 3 root root 4096 Feb 22 17:02 Catalina -rw------- 1 root root 12374 May 19 2015 catalina.policy -rw------- 1 root root 7086 May 19 2015 catalina.properties -rw------- 1 root root 1577 May 19 2015 context.xml -rw------- 1 root root 3387 May 19 2015 logging.properties -rw------- 1 root root 6458 May 19 2015 server.xml -rw------- 1 root root 1744 May 19 2015 tomcat-users.xml -rw------- 1 root root 1846 May 19 2015 tomcat-users.xsd -rw------- 1 root root 166582 May 19 2015 web.xml
server.xml 是tomcat主配置文件,可以设置tomcat的端口号、设置域名或IP、默认加载的项目、请求编码、tomcat的运行模式等
web.xml 是设置tomcat支持的文件类型
context.xml 可以用来配置数据源之类的catalina.properties 配置文件是Tomcat环境变量配置
catalina.policy 当 Tomcat在安全模式下运行时,此文件为默认的安全策略配置
logging.properties 是Tomcat日志配置文件,可通过该文件修改 Tomcat日志级别以及日志路径等
tomcat-users.xml 用来配置管理tomcat控制台的用户与权限
在Catalina目录下可以设置默认加载的项目
lib目录:
lib目录主要用来存放tomcat运行需要加载的jar包
[root@VM-8-10-centos lib]# ll total 7184 -rw-r--r-- 1 root root 17352 May 19 2015 annotations-api.jar -rw-r--r-- 1 root root 52574 May 19 2015 catalina-ant.jar -rw-r--r-- 1 root root 119852 May 19 2015 catalina-ha.jar -rw-r--r-- 1 root root 1534530 May 19 2015 catalina.jar -rw-r--r-- 1 root root 74630 May 19 2015 catalina-storeconfig.jar -rw-r--r-- 1 root root 256011 May 19 2015 catalina-tribes.jar -rw-r--r-- 1 root root 2310271 May 19 2015 ecj-4.4.2.jar -rw-r--r-- 1 root root 81457 May 19 2015 el-api.jar -rw-r--r-- 1 root root 161353 May 19 2015 jasper-el.jar -rw-r--r-- 1 root root 581401 May 19 2015 jasper.jar -rw-r--r-- 1 root root 61417 May 19 2015 jsp-api.jar -rw-r--r-- 1 root root 244249 May 19 2015 servlet-api.jar -rw-r--r-- 1 root root 8973 May 19 2015 tomcat-api.jar -rw-r--r-- 1 root root 701433 May 19 2015 tomcat-coyote.jar -rw-r--r-- 1 root root 237251 May 19 2015 tomcat-dbcp.jar -rw-r--r-- 1 root root 67973 May 19 2015 tomcat-i18n-es.jar -rw-r--r-- 1 root root 41471 May 19 2015 tomcat-i18n-fr.jar -rw-r--r-- 1 root root 43588 May 19 2015 tomcat-i18n-ja.jar -rw-r--r-- 1 root root 134056 May 19 2015 tomcat-jdbc.jar -rw-r--r-- 1 root root 31461 May 19 2015 tomcat-jni.jar -rw-r--r-- 1 root root 103243 May 19 2015 tomcat-util.jar -rw-r--r-- 1 root root 198014 May 19 2015 tomcat-util-scan.jar -rw-r--r-- 1 root root 211699 May 19 2015 tomcat-websocket.jar -rw-r--r-- 1 root root 36603 May 19 2015 websocket-api.jar
例如,像连接数据库的jdbc的包我们可以加入到lib目录中来
logs目录:
logs目录用来存放tomcat在运行过程中产生的日志文件,非常重要的是在控制台输出的日志。(清空不会对tomcat运行带来影响)
在windows环境中,控制台的输出日志在catalina.xxxx-xx-xx.log文件中
在linux环境中,控制台的输出日志在catalina.out文件中一般情况tomcat作为java运行中间件服务,都会设置生成业务的日志文件,以便进行业务日志的分析
[root@VM-8-10-centos logs]# ll total 20 -rw-r--r-- 1 root root 5849 Feb 22 17:02 catalina.2023-02-22.log -rw-r--r-- 1 root root 5849 Feb 22 17:02 catalina.out -rw-r--r-- 1 root root 0 Feb 22 17:02 host-manager.2023-02-22.log -rw-r--r-- 1 root root 280 Feb 22 17:02 localhost.2023-02-22.log -rw-r--r-- 1 root root 0 Feb 22 17:02 localhost_access_log.2023-02-22.txt -rw-r--r-- 1 root root 0 Feb 22 17:02 manager.2023-02-22.log
temp目录:
temp目录用户存放tomcat在运行过程中产生的临时文件。(清空不会对tomcat运行带来影响)。
[root@VM-8-10-centos temp]# ll
total 0
-rw-r--r-- 1 root root 0 May 19 2015 safeToDelete.tmp
webapps目录:
webapps目录用来存放应用程序,当tomcat启动时会去加载webapps目录下的应用程序。可以以文件夹、war包、jar包的形式发布应用,常见的是war包的形式,tomcat服务支持自动解压war包。
当然,你也可以把应用程序放置在磁盘的任意位置,在配置文件中映射好就行。[root@VM-8-10-centos webapps]# ll total 20 drwxr-xr-x 14 root root 4096 Feb 22 16:17 docs drwxr-xr-x 6 root root 4096 Feb 22 16:17 examples drwxr-xr-x 5 root root 4096 Feb 22 16:17 host-manager drwxr-xr-x 5 root root 4096 Feb 22 16:17 manager drwxr-xr-x 3 root root 4096 Feb 22 16:17 ROOT
wokr目录:
work目录用来存放tomcat在运行时的编译后文件,例如JSP编译后的文件。
[root@VM-8-10-centos work]# ll total 4 drwxr-xr-x 3 root root 4096 Feb 22 17:02 Catalina
运维常见使用该目录的场景为:清理tomcat的缓存
注:清空work目录,然后重启tomcat,可以达到清除缓存的作用。
二、tomcat服务的运行模式
tomcat的运行模式主要有三种,分别是BIO、NIO和APR。
三种运行模式适用场景:
- BIO:适用连接数较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中。
- NIO:适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂。
- APR:适用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂。
BIO NIO APR的模式介绍:
- BIO(blocking I/O):阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包)。Tomcat在默认情况下,就是以bio模式运行的。遗憾的是,就一般而言,bio模式是三种运行模式中性能最低的一种。我们可以通过Tomcat Manager来查看服务器的当前状态。
- NIO:是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性能
- APR:(Apache Portable Runtime/Apache可移植运行库),是Apache HTTP服务器的支持库。你可以简单地理解为,Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。 Tomcat apr也是在Tomcat上运行高并发应用的首选模式。
tomcat的三种运行模式的特征:
模式 | 默认运行版本 | 处理方式 |
---|---|---|
BIO运行模式 | Tomcat7或以下版本 | 一个线程处理一个请求;缺点:并发量高是,线程数较多,浪费资源 |
NIO运行模式 | Tomcat8版本 | 利用Java的异步IO处理,可通过少量的线程处理大量请求; |
APR运行模式 | Tomcat7 或 8 在win7或以上系统中默认使用 | 从操作系统层面解决IO阻塞问题; |
查看当前的tomcat处于哪个运行模式:
Tomcat服务启动时,可以通过 catalina.out的运行日志
查看tomcat使用的是哪种运行模式:
[root@VM-8-10-centos logs]# cat catalina.out | grep "http-bio-8080"
Starting ProtocolHandler ["http-bio-8080"] ## BIO模式
[root@VM-8-10-centos logs]# cat catalina.out | grep "http-nio-8080"
Starting ProtocolHandler ["http-nio-8080"] ## NIO模式
[root@VM-8-10-centos logs]# cat catalina.out | grep "http-apr-8080"
Starting ProtocolHandler ["http-apr-8080"] ## APR模式
注: 自Tomcat 8.5 版本开始,Tomcat就移除了对BIO的支持;
tomcat的运行模式设置为NIO模式:
NIO是利用java的异步io护理技术,noblocking IO技术。要想运行在该模式下,则直接修改server.xml里的Connector节点,修改protocol为如下配置
........
<Connector executor="tomcatThreadPool"
port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />
......
<Connector port="8009" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443" />
.......
注:这里是将tomcat提供服务的端口和与其他http服务器通信接口都修改为NIO运行模式。
tomcat的运行模式设置为APR模式:
tomcat要运行APR运行模式需要安装apr服务和tomcat-native服务可以能支持的。并且目前默认的是tomcat8.是自带了tomcat-native包的。
[root@VM-8-10-centos bin]# ls
bootstrap.jar catalina-tasks.xml configtest.bat digest.bat setclasspath.sh startup.bat tomcat-native.tar.gz version.bat
catalina.bat commons-daemon.jar configtest.sh digest.sh shutdown.bat startup.sh tool-wrapper.bat version.sh
catalina.sh commons-daemon-native.tar.gz daemon.sh setclasspath.bat shutdown.sh tomcat-juli.jar tool-wrapper.sh
启用APR运行模式部署过程如下:
这里是以tomcat-8.5.85版本为例的。
1. 安装apr服务和相关的依赖包
[root@VM-8-10-centos app ]# ll *.tar.gz
-rw-r--r-- 1 root root 1115676 Feb 22 20:44 apr-1.7.2.tar.gz
-rw-r--r-- 1 root root 1248250 Feb 22 20:44 apr-iconv-1.2.2.tar.gz
-rw-r--r-- 1 root root 556623 Feb 22 20:44 apr-util-1.6.3.tar.gz
[root@VM-8-10-centos app ]# yum install cmake gcc expat-devel
..............
安装apr
安装apr
[root@VM-8-10-centos app]# tar -zxvf apr-1.7.2.tar.gz ...........
编译apr
[root@VM-8-10-centos app]# cd apr-1.7.2 [root@VM-8-10-centos apr-1.7.2]# ./configure --prefix=/usr/local/apr ................ ................. config.status: creating apr.pc config.status: creating test/Makefile config.status: creating test/internal/Makefile config.status: creating include/arch/unix/apr_private.h config.status: executing libtool commands rm: cannot remove 'libtoolT': No such file or directory config.status: executing default commands config.status: include/apr.h is unchanged config.status: include/arch/unix/apr_private.h is unchanged
[root@VM-8-10-centos apr-1.7.2]# make && make install .......... .......... /bin/install -c -m 755 /app/apr-1.7.2/build/mkdir.sh /usr/local/apr/build-1 for f in make_exports.awk make_var_export.awk; do \ /bin/install -c -m 644 /app/apr-1.7.2/build/${f} /usr/local/apr/build-1; \ done /bin/install -c -m 644 build/apr_rules.out /usr/local/apr/build-1/apr_rules.mk /bin/install -c -m 755 apr-config.out /usr/local/apr/bin/apr-1-config
安装apr-iconv
[root@VM-8-10-centos app]# cd apr-iconv-1.2.2/
[root@VM-8-10-centos apr-iconv-1.2.2]# ./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr
........
config.status: creating lib/Makefile
config.status: creating util/Makefile
config.status: creating lib/apr_iconv_private.h
[root@VM-8-10-centos apr-iconv-1.2.2]# make && make install
...............
...............
mkdir /usr/local/apr-iconv/include
mkdir /usr/local/apr-iconv/include/apr-1
/bin/install -c -m 644 /app/apr-iconv-1.2.2/include/api_version.h /usr/local/apr-iconv/include/apr-1
/bin/install -c -m 644 /app/apr-iconv-1.2.2/include/apr_iconv.h /usr/local/apr-iconv/include/apr-1
if [ ! -d /usr/local/apr-iconv/bin ]; then \
/app/apr-iconv-1.2.2/build/mkdir.sh /usr/local/apr-iconv/bin; \
fi; \
(cd util; /bin/sh /usr/local/apr/build-1/libtool --mode=install cp apriconv /usr/local/apr-iconv/bin)
mkdir /usr/local/apr-iconv/bin
libtool: install: cp .libs/apriconv /usr/local/apr-iconv/bin/apriconv
安装apr-util
[root@VM-8-10-centos app]# cd apr-util-1.6.3/
[root@VM-8-10-centos apr-util-1.6.3]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv
.......
config.status: creating include/apu_want.h
config.status: creating test/Makefile
config.status: creating include/private/apu_config.h
config.status: include/private/apu_config.h is unchanged
config.status: executing default commands
[root@VM-8-10-centos apr-util-1.6.3]# make && make install
.......
libtool: install: (cd /usr/local/apr-util/lib && { ln -s -f libaprutil-1.so.0.6.3 libaprutil-1.so || { rm -f libaprutil-1.so && ln -s libaprutil-1.so.0.6.3 libaprutil-1.so; }; })
libtool: install: /bin/install -c -m 755 .libs/libaprutil-1.lai /usr/local/apr-util/lib/libaprutil-1.la
libtool: install: /bin/install -c -m 755 .libs/libaprutil-1.a /usr/local/apr-util/lib/libaprutil-1.a
libtool: install: chmod 644 /usr/local/apr-util/lib/libaprutil-1.a
libtool: install: ranlib /usr/local/apr-util/lib/libaprutil-1.a
libtool: warning: remember to run 'libtool --finish /app/apr-util/lib'
/bin/install -c -m 644 aprutil.exp /usr/local/apr-util/lib
/bin/install -c -m 755 apu-config.out /usr/local/apr-util/bin/apu-1-config
2. 安装tomcat-native
[root@VM-8-10-centos bin]# pwd
/app/apache-tomcat-8.5.85/bin[root@VM-8-10-centos bin]# tar -zxvf tomcat-native.tar.gz
...........
[root@VM-8-10-centos bin]# cd tomcat-native-1.2.35-src/native
[root@VM-8-10-centos native]# pwd
/app/apache-tomcat-8.5.85/bin/tomcat-native-1.2.35-src/native
[root@VM-8-10-centos native]# ./configure --with-apr=/usr/local/apr/ --with-java-home=/app/java/jdk1.8.0_171/
............
...........
checking for apr_pollset_wakeup in -lapr-1... no
cp: cannot stat '/apr_rules.mk': No such file or directory
configure: creating ./config.status
config.status: creating Makefile
config.status: executing default commands
[root@VM-8-10-centos native]# make && make install
........
.......
----------------------------------------------------------------------
Libraries have been installed in:
/usr/local/apr/lib
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the '-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the 'LD_RUN_PATH' environment variable
during linking
- use the '-Wl,-rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to '/etc/ld.so.conf'
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
注:显示如上表示已经安装完成了。
3.设置apr的环境变量
[root@VM-8-10-centos app]# vim /etc/profile
添加如下的内容:
#apr
export LD_LIBRARY_PATH=/usr/local/apr/lib[root@VM-8-10-centos app]# source /etc/profile
4.修改tomcat的server.xml为apr运行模式
修改Tomcat 下 conf/server.xml protocol的值 HTTP/1.1为org.apache.coyote.http11.Http11AprProtocol
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443" />
修改SSLEngine 为off
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />
启动tomcat服务:
[root@VM-8-10-centos conf]# cd ../bin/
[root@VM-8-10-centos bin]# ./startup.sh
Using CATALINA_BASE: /app/apache-tomcat-8.5.85
Using CATALINA_HOME: /app/apache-tomcat-8.5.85
Using CATALINA_TMPDIR: /app/apache-tomcat-8.5.85/temp
Using JRE_HOME: /app/java/jdk1.8.0_171/jre
Using CLASSPATH: /app/apache-tomcat-8.5.85/bin/bootstrap.jar:/app/apache-tomcat-8.5.85/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
[root@VM-8-10-centos bin]# ps -ef | grep java
root 15830 1 64 16:05 pts/10 00:00:02 /app/java/jdk1.8.0_171/jre/bin/java -Djava.util.logging.config.file=/app/apache-tomcat-8.5.85/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /app/apache-tomcat-8.5.85/bin/bootstrap.jar:/app/apache-tomcat-8.5.85/bin/tomcat-juli.jar -Dcatalina.base=/app/apache-tomcat-8.5.85 -Dcatalina.home=/app/apache-tomcat-8.5.85 -Djava.io.tmpdir=/app/apache-tomcat-8.5.85/temp org.apache.catalina.startup.Bootstrap start
root 15892 5766 0 16:05 pts/10 00:00:00 grep --color=auto java
[root@VM-8-10-centos bin]# netstat -anlp | grep java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 15830/java
tcp6 0 0 :::8080 :::* LISTEN 15830/java
unix 2 [ ] STREAM CONNECTED 1700819 15830/java
5.验证tomcat当前运行模式
[root@VM-8-10-centos bin]# cd ../logs/
[root@VM-8-10-centos logs]# tail -100f catalina.out23-Feb-2023 16:05:55.857 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name: Apache Tomcat/8.5.85 23-Feb-2023 16:05:55.860 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Jan 11 2023 00:09:15 UTC 23-Feb-2023 16:05:55.860 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 8.5.85.0 23-Feb-2023 16:05:55.860 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux 23-Feb-2023 16:05:55.860 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 3.10.0-1160.71.1.el7.x86_64 23-Feb-2023 16:05:55.860 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64 23-Feb-2023 16:05:55.860 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /app/java/jdk1.8.0_171/jre 23-Feb-2023 16:05:55.860 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 1.8.0_171-b11 23-Feb-2023 16:05:55.860 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Oracle Corporation 23-Feb-2023 16:05:55.861 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /app/apache-tomcat-8.5.85 23-Feb-2023 16:05:55.861 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /app/apache-tomcat-8.5.85 23-Feb-2023 16:05:55.861 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/app/apache-tomcat-8.5.85/conf/logging.properties 23-Feb-2023 16:05:55.861 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 23-Feb-2023 16:05:55.861 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048 23-Feb-2023 16:05:55.861 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources 23-Feb-2023 16:05:55.861 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 23-Feb-2023 16:05:55.861 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs= 23-Feb-2023 16:05:55.861 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/app/apache-tomcat-8.5.85 23-Feb-2023 16:05:55.862 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/app/apache-tomcat-8.5.85 23-Feb-2023 16:05:55.862 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/app/apache-tomcat-8.5.85/temp 23-Feb-2023 16:05:55.862 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.2.35] using APR version [1.7.2]. 23-Feb-2023 16:05:55.862 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true], UDS [{4}]. 23-Feb-2023 16:05:55.862 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true] 23-Feb-2023 16:05:55.993 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-apr-8080"] 23-Feb-2023 16:05:56.030 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 608 ms 23-Feb-2023 16:05:56.060 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina] 23-Feb-2023 16:05:56.060 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/8.5.85] 23-Feb-2023 16:05:56.071 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/app/apache-tomcat-8.5.85/webapps/docs] 23-Feb-2023 16:05:56.323 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/app/apache-tomcat-8.5.85/webapps/docs] has finished in [250] ms 23-Feb-2023 16:05:56.323 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/app/apache-tomcat-8.5.85/webapps/examples] 23-Feb-2023 16:05:56.536 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/app/apache-tomcat-8.5.85/webapps/examples] has finished in [213] ms 23-Feb-2023 16:05:56.536 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/app/apache-tomcat-8.5.85/webapps/host-manager] 23-Feb-2023 16:05:56.561 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/app/apache-tomcat-8.5.85/webapps/host-manager] has finished in [25] ms 23-Feb-2023 16:05:56.562 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/app/apache-tomcat-8.5.85/webapps/manager] 23-Feb-2023 16:05:56.581 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/app/apache-tomcat-8.5.85/webapps/manager] has finished in [19] ms 23-Feb-2023 16:05:56.581 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/app/apache-tomcat-8.5.85/webapps/ROOT] 23-Feb-2023 16:05:56.592 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/app/apache-tomcat-8.5.85/webapps/ROOT] has finished in [11] ms 23-Feb-2023 16:05:56.594 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8080"] 23-Feb-2023 16:05:56.617 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 586 ms
tomcat的运行日志文件catalina.out,有看到["http-apr-8080"],表示tomcat的运行模式出于APR模式下.
总结:
个人觉得在tomcat bio、nio、apr模式中,每种都会有各自适用的场合,apr其实也是nio只不过他是操作系统级别的支持,nio是由java本身的nio支持的,
也不能说哪个好那个不好。就像tomcat内存方面的配置,如果内存设置的过大,gc垃圾回收机制就会变慢;如果内存设置的过小,tomcat又会出现内存溢出的情况,
所以设置在一个合适的范围很重要,不仅不会出错,并且gc回收频繁使性能达到一个最优的结果。当然,这也需要根据不同的场合进行不同的测试才能产生最优的结果!