学习重点:配置文件参数、故障排错、性能优化,Tomcat 部署。
一、Tomcat配置文件标签&参数剖析
tomcat配置文件:/usr/local/tomcat/conf/server.xml
conf目录下的web.xml也是配置文件,只不过这个一般是java开发才用的。我们不需要管它。
1、server.xml文件中核心标签详解
<Server> #定义Tomcat服务器,为顶级标签;
<Service> #定义Tomcat服务,可包含一个Engine,多个Connecter;
<Connector> #定义Tomcat连接器,定义Tomcat对外通信端口;
<Engine> #表示Tomcat Service引擎,包含多个Host主机;
<Host> #定义虚拟主机配置段,可包含多个Context发布目录;
<Context> #定义Tomcat内容,可以定义目录、发布内容;
<Valve> #定义Tomcat服务日志路径、参数、内容格式;
<Realm> #定义Tomcat用户的认证和授权配置;
<GlobalNamingResources> #定义Tomcat用户的认证和授权全局标签,包含Realm配置。
2、server.xml详情
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8090" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
二、tomcat服务器性能优化
1、Tomcat服务器连接器运行模式的选择;
Tomcat Connector(Tomcat连接器)有bio(已淘汰)、nio、apr三种运行模式,在生产环境推荐使用nio和apr方式,从请求处理方式和操作系统级别来解决异步的IO问题,大幅度的提高性能。
注:中小型企业一般采用nio,大型企业一般都采用apr
(1)三种模式解析
-
BIO:
bio是阻塞式IO操作,使用java io技术,即每一个请求都要创建一个线程来进行处理。缺点:并发量高时,线程数较多,占资源
-
NIO:
使用java nio技术,能够通过少量的线程处理大量的请求,nio是基于java中非阻塞IO操作的API实现,比传统的i/o处理方式有更高的并发运行性能
-
APR(Apache Portable Runtime/Apache可移植运行时库):
Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能;apr是从操作系统级别解决异步IO问题,大幅度提高服务器的并发处理性能,也是Tomcat生产环境运行的首选方式
(2)怎么查看当前tomcat使用的是那种模式
tail -n 10 /opt/tomcat/logs/catalina.out //注意我并没有把tomcat放在/usr/local/下
从红框框中内容可知:http和ajp都是以nio的模式启动的。
(3)nio和apr模式的切换
[1]切换到nio模式
vim /opt/tomcat/conf/server.xml
修改以下内容:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改protocol的值为org.apache.coyote.http11.Http11NioProtocol
重启tomcat即可。
[2]切换到apr模式
- 安装apr:yum -y install apr apr-devel
- 安装native:
注:一般来说/usr/local/tomcat/bin/下,tomcat都会自带有native压缩包。若没有在下面获取。
cd /usr/local/tomcat/bin/
tar xzfv tomcat-native.tar.gz
cd tomcat-native-1.1.33-src/jni/native/
//上面这步版本不同,可能地址会不一样。照下图说的做就行。
./configure --with-apr=/usr/bin/apr-1-config
make && make install
注:再在有configure的目录下执行后面的预编译、编译、安装。
native下载地址:
https://archive.apache.org/dist/tomcat/tomcat-connectors/native/
wget https://archive.apache.org/dist/tomcat/tomcat-connectors/native/tomcat-native-1.1.3.tar.gz
- tomcat和apr整合
在/etc/profile中加入:
export CATALINA_OPTS=-Djava.library.path=/usr/local/apr/lib
source /etc/profile
修改配置文件server.xml
修改以下内容:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改protocol的值为org.apache.coyote.http11.Http11AprProtocol
再重启tomcat就好了。
这时我们能够发现http已经是以apr模式启动的了,如果ajp也想要以apr的话则:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
修改protocol的值为org.apache.coyote.ajp.AjpAprProtocol
再重新启动tomcat。
2、关闭Tomcat server.xml文件中不必要的标签和参数;
Tomcat标签有很多,通常来讲,有部分标签对于业务访问没有需求,可以删除,从而可以加快配置文件查询或者管理便捷。可以删除的标签:
<GlobalNamingResources>
<Realm>
<Context>
4)调整Tomcat WEB对连接数相关参数;
minSpareThreads:最小空闲线程数
maxSpareThreads:最大空闲线程数
maxThreads:最大线程数,大并发请求时
acceptCount:请求队列排队个数
ConnectionTimeout:网络连接超时
以上参数的配置示例:
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="443"
maxThreads="5000"
minSpareThreads="20"
acceptCount="10000"
disableUploadTimeout="true"
enableLookups="false"
URIEncoding="UTF-8" />
5)调整Tomcat JVM虚拟机内存设置;
Xmx2048M,设置Java虚拟机的堆的最大可用内存大小
Xms2048M,设置Java虚拟机的堆的初始值内存大小
Xmn512M,设置年轻代内存大小,一般设置为Xmx的1/4
配置示例:
在/opt/tomcat/bin/catalina.sh中添加以下内容:
CATALINA_OPTS="$CATALINA_OPTS -Xms512M -Xmx1024M -Xmn256M"
6)关闭Tomcat DNS反查功能;
将参数设置为false,enableLookups=”false”,表示关闭DNS域名反查,提高处理能力。
3、JDK、JRE、JVM关系图: