tomcat 服务的目录结构和tomcat的运行模式
目录
一、tomcat 服务的目录结构解析:
1、tomcat目录结构:
bin目录:
conf目录:
lib目录:
logs目录:
temp目录:
webapps目录:
wokr目录:
二、tomcat服务的运行模式
三种运行模式适用场景:
BIO NIO APR的模式介绍:
tomcat的三种运行模式的特征:
查看当前的tomcat处于哪个运行模式:
tomcat的运行模式设置为NIO模式:
tomcat的运行模式设置为APR模式:
1. 安装apr服务和相关的依赖包
安装apr
安装apr-iconv
安装apr-util
2. 安装tomcat-native
3.设置apr的环境变量
4.修改tomcat的server.xml为apr运行模式
5.验证tomcat当前运行模式
总结:
一、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/libIf 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 variableduring execution- add LIBDIR to the 'LD_RUN_PATH' environment variableduring 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回收频繁使性能达到一个最优的结果。当然,这也需要根据不同的场合进行不同的测试才能产生最优的结果!
相关文章:

tomcat 服务的目录结构和tomcat的运行模式
目录 一、tomcat 服务的目录结构解析: 1、tomcat目录结构: bin目录: conf目录: lib目录: logs目录: temp目录: webapps目录: wokr目录: 二、tomcat服务的运行模…...

vector迭代器失效问题
一、迭代器: 迭代器的主要作用就是让算法能够不用关心底层数据结构,其底层实际就是一个指针,或者是对指针进行了封装,比如:vector的迭代器就是原生态指针T* 。因此迭代器失效,实际就是迭代器底层对应指针所…...

2023年排名前茅的十大饭店装修设计!
相信大家都是知道的,饭店装修设计其实是一门很深的学问,只有掌握这门学问才能够打造出来精美的空间,因此饭店装修必须要有专业餐饮设计公司的设计师进行设计。但是在国内饭店装修设计公司那么多,饭店老板要如何选择呢?…...

MFCCA多通道多说话人语音识别模型上线魔搭(ModelScope)
实验室研发的基于多帧跨通道注意力机制(MFCCA)的多说话人语音识别模型近日上线魔搭(ModelScope)社区,该模型在AliMeeting会议数据集上获得当前最优性能。欢迎大家下载。开发者可以基于此模型进一步利用ModelScope的微调…...

刷题记录:牛客NC25078[USACO 2007 Ope S]City Horizon
传送门:牛客 题目描述: Farmer John has taken his cows on a trip to the city! As the sun sets, the cows gaze at the city horizon and observe the beautiful silhouettes formed by the rectangular buildings. The entire horizon is represented by a number line …...

【Java|golang】 1238. 循环码排列---格雷编码
给你两个整数 n 和 start。你的任务是返回任意 (0,1,2,…,2^n-1) 的排列 p,并且满足: p[0] start p[i] 和 p[i1] 的二进制表示形式只有一位不同 p[0] 和 p[2^n -1] 的二进制表示形式也只有一位不同 示例 1: 输入:n 2, start …...

Python自动化测试框架封装和调用
封装与调用函数与参数化前言 面实现了参数的关联,那种只是记流水账的完成功能,不便于维护,也没什么可读性,接下来这篇可以把每一个动作写成一个函数,这样更方便了。参数化的思维只需记住一点:不要写死 登录…...

线程的执行
承接上文CPU原理简介程序的执行是由控制器发信号推动整个程序一步一步向前走,将数据存储在寄存器,从程序计数器中获取指令,比如先把3放到寄存器,再把5放到寄存器,再做一个加法,加法就是一个指令,…...

【视频】海康摄像头、NVR网络协议简介
1、软硬件整体架构 2、涉及的网络协议 3、协议简介 3.1 海康私有协议 设备发现SADP:进行设备的发现、激活、修改网络参数、忘记密码等; SDK:4200、系统平台的接入前端设备,协议不对外开放,但对外提供接口库; ISAPI:Intelligent Security API(智能安全API),基于HTTP传输…...

【Spring的事务传播行为有哪些呢?Spring事务的隔离级别?讲下嵌套事务?】
如果你想寻求一份与后端相关的开发工作,那么关于Spring事务相关的面试题你就不能说不会并且不能不知道? 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步? 一.Spring中声明事务的方式 1.1 编程式事务 编程…...

其实一点不难学会这三步一定让你学会制作一个『3D建模』大屏
上次已经教过大家怎样制作一个简单的2D数据可视化大屏~那有一些朋友们就会说那些炫酷的3D可视化大屏是怎样制作的呢?这不就来了,今天就教大家怎样用山海鲸可视化软件制作一个带3D建模的可视化大屏,并且最重要的是无需会特别复杂的3D建模知识。…...

【C++】C++的内存模型之四大分区
程序的内存模型 C程序在执行时,将内存大方向划分为4个区域 代码区:存放函数体的二进制代码,由操作系统进行管理的全局区:存放全局变量和静态变量以及常量栈区:由编译器自动分配释放,存放函数的参数值&…...

Vue跨级通信(重点)
当不使用Vuex的前提下,子孙传递就得使用另外一种办法:provide 和 inject 总结:provide / inject 类似于消息的订阅和发布。- inject接收数据。- provide提供或发送数据,(1)provide(name…...

支付系统中的设计模式07:责任链模式
最近公司业务的发展果然如老板当初所画(预)饼(言)的那样红(恍)红(恍)火(惚)火(惚),蒸蒸日上,每天的流水都在不断攀升到新的高度,有不少人都从公司开发的电商平台挣到了钱。 不过问题也接着来了——运营部门经过老板的同意,也学着产品经理提出了下面几项非常合理…...

期末综合考试
一、概率论1、全概率公式、贝叶斯公式应用2、期望、方差、协方差的定义以及性质证明(1) 期望(2) 方差(3) 协方差二、数理统计1、参数估计(1) 矩估计(2) 最大似然估计(3) 综合例题一、概率论 1、全概率公式、贝叶斯公式应用 记住标黄的两段,上考场直接套数据&#x…...

数据结构与算法之爬楼梯动态规划
一.题目(爬楼梯)假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬…...

CleanMyMac4.12最新Mac电脑系统垃圾清理神器
CleanMyMac是Mac一款神器,特别是清理已卸载软件残留垃圾文件信息库比较全面。 clearmymac以极其快速和时尚的方式为您提供及时的建议,组织,更新和保护您的Mac。完全支持macOS 11(Big Sur)操作系统;它以其简…...

数据治理如何做?火山引擎 DataLeap 帮助这款产品 3 个月降低计算成本 20%
更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 本文讲述字节跳动一款 App 产品的数据治理故事。该产品随着用户体量和数据体量不断增长,数仓的任务量、数据量也不断攀升,运维难、成本贵、稳…...

求职3个月,简历大多都石沉大海,一听是手工测试都纷纷摇头....太难了
距离被上家公司裁员已经过去了3个月了,3个月的求职经历真的让我痛不欲生,我也从中理解感叹到了很多,想写出来,告诫跟我一样的经历的人。 我今年26岁,大学是一所普通的大专,学的是机电专业,如何…...

Visual Studio快捷键汇总
常用快捷键CtrlEC 注释代码CtrlEU 取消注释代码CtrlED 格式化全部代码CtrlShiftA 新建类CtrlRG 删除无效UsingCtrlH 批量替换CtrlG 跳转到指定行CtrlEE 在交互窗口中运行选中代码(很实用)AltEnter 快速引用shiftF9 监控(代码运行时)shiftF6 生成(当前类库)F6 生成(整个解决方案…...

ctf pwn基础-2
今天学了一个保护的绕过,这里讲一讲,这个好像是使用的是格式化字符串漏洞。 目录 基础 实例讲解 基础 首先我们要知道什么是canary保护,就是在入栈EBP以后加一个Canary 我可能讲的不是很好,大家可以看看这些 文章 用通俗一点将就…...

从一个SQL打印全年日历漫谈数据仓库中时间操作场景的重点写法
文章目录前言一、我如何快速确定今年是否是闰年的😣二、 我如何从DATE类型数据获取年、月(月初&月末)、周、日、时、分、秒信息🤯三、我如何快速查到本月月初第一周的周一和本月最后一周周一是在几号😑四、我如何快速确定每个季度的开始和…...

Java跳槽涨薪之路-想学Java的赶紧上车了
前言Java 是近 10 年来计算机软件发展过程中的传奇,在很多开发者心中的地位可谓“爱不释手”,与其他一些计算机语言随着时间的流逝影响也逐渐减弱不同,Java 随着时间的推移反而变得更加强大。按应用范围,Java 可分为 3 个体系&…...

MyBatis解析全局配置文件
目录 MyBatis介绍 传统JDBC和Mybatis相比的弊病 传统JDBC的问题如下 mybatis对传统的JDBC的解决方案 Mybaits整体体系图 使用大致过程 MyBatis 源码编译 源码解析 配置文件解析 读取配置文件 返回SqlSessionFactory 配置文件内容 解析的核心方法 解析出来的对象 …...

37-Golang中的封装
封装介绍 封装就是把抽象出的字段和对字段的操作封装在一起,数据被保护在内部,程序的其他包只有通过被授权的操作(方法),才能对字段进行操作 封装的理解和好处 1.隐藏实现细节 2.可以对数据进行验证,保证安全合理 如何体现封…...

Python Pytorch开发环境搭建(Windows和Ubuntu)
Python Pytorch开发环境搭建(Windows和Ubuntu) 目录 Pytorch开发环境搭建 1. 安装cuda cudnn (1)Windows安装方法 (2)Ubuntu18.04安装方法 2. 安装Python(推荐使用Anaconda) (1)Windows安装方法 (2)Ubuntu18.04安装方法 3. Pytorch安装 4. 安装…...

多种方法进行去基线处理
目录detrend函数去除基线多项式拟合原函数BEADS 基线处理小波算法经验模态分解(EMD)参考detrend函数去除基线 detrend函数只能用于去除线性趋势,对于非线性的无能为力。 函数表达式:y scipy.signal.detrend(x): 从信号中删除线…...

二叉树——最大二叉树
最大二叉树 链接 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。 递归地在最大值 左边 的 子数组前缀上 构建左子树。 递归地在最大值 右边 的 子数组后缀上 构建右子树。 返回 nums…...

【Redis】Redis 的过期策略以及内存淘汰机制详解
Redis 的过期策略以及内存淘汰机制详解1. Redis 的过期策略1.1 如何设置 key 的过期时间?1.2 key 设置且到了过期时间后,该 key 保存的数据还占据内存么?1.3 Redis 如何删除过期的数据1.3.1 定期删除1.3.2 惰性删除2. Redis 的内存淘汰机制2.…...

边缘云是什么?
涂鸦边缘云服务 旨在解决物联网边缘位置的连接需求和提高设备自主管理能力。并与涂鸦 IoT 云服务和 IoT 终端形成云边端三位一体的端到端产品架构。使用涂鸦边缘云,能极大降低设备响应延时、降低网络带宽压力、提高算力分发能力,并构建以下技术优势&…...