Web服务(12)——Tomcat管理

Web服务(12)——Tomcat管理

一、检查tomcat是否启动

当我们需要查看tomcat服务是否在工作中可以通过监听服务的方式来查看,而所有与java相关的服务启动都是java命名的进程。

8080:建立http,客户端访问链接的端口

8005:tomcat自身的端口,监听关闭tomcat请求的端口,比如shutdown指令

8009:ajp端口,是与其他http服务通讯的一个接口,如apache、nginx

PS:AJP(Apache Jserv Protocol)专用于tomcat与apache建立通信的,在httpd反向代理用户请求至tomcat时使用(可见Nginx反向代理时不可用AJP协议)。

二、Tomcat日志说明

1.查看日志

[root@TTTTTTT conf]# tail -f /usr/local/tomcat/logs/catalina.out 
27-Jul-2022 14:19:40.764 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/docs] has finished in [24] ms
27-Jul-2022 14:19:40.764 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory 把web 应用程序部署到目录 [/usr/local/tomcat/webapps/examples]
27-Jul-2022 14:19:40.994 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/examples] has finished in [230] ms
27-Jul-2022 14:19:40.994 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory 把web 应用程序部署到目录 [/usr/local/tomcat/webapps/host-manager]
27-Jul-2022 14:19:41.006 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/host-manager] has finished in [12] ms
27-Jul-2022 14:19:41.007 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory 把web 应用程序部署到目录 [/usr/local/tomcat/webapps/manager]
27-Jul-2022 14:19:41.020 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/manager] has finished in [13] ms
27-Jul-2022 14:19:41.023 信息 [main] org.apache.coyote.AbstractProtocol.start 开始协议处理句柄["http-nio-8080"]
27-Jul-2022 14:19:41.033 信息 [main] org.apache.coyote.AbstractProtocol.start 开始协议处理句柄["ajp-nio-8009"]
27-Jul-2022 14:19:41.041 信息 [main] org.apache.catalina.startup.Catalina.start Server startup in [684] milliseconds

其中我们可能会发现启动时间较长,而其中有一项的启动时间占据了绝大多数时间:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mSuLUPWP-1658923053729)(https://s2.loli.net/2022/07/27/fmXqWojvMzVHkg9.png)]

耗时原因:是session引起的随机数问题导致的。tomcat的session id是通过SHA1算法计算得到的,计算session id的时候必须要有一个密钥,为了提高安全性tomcat在启动的时候会通过随机生成一个密钥。

如何解决tomcat由于生成随机数的时候卡死,导致启动慢的问题?

这时候们要查看是否有足够的熵来用于产生随机数:

[root@TTTTTTT conf]# cat /proc/sys/kernel/random/entropy_avail 
3266

PS:熵:Linux内核采用熵来描述数据的随机性。熵(entropy)是描述系统混乱无序程度的物理量,一个系统的熵越大则说明该系统的有序性越差,即不确定性越大。 在信息学中,熵被用来表征一个符号或系统的不确定性,熵越大,表明系统所含有用信息量越少,不确定度越大。

如果这个值小于要产生的随机数,那么/dev/random就会阻塞,导致tomcat卡死,所以这个值越大越好。

为了加速/dev/random提供随机数的速度,我们需要生成大量的随机字节。这个时候可以多做些琐事(像是敲打键盘、移动鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。

或者我们可以修改jdk参数:

vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security

securerandom.source=file:/dev/random	#117行
#修改为
securerandom.source=file:/dev/urandom

/dev/urandom是/dev/random的非阻塞版本,/dev/random的random pool
依赖于系统中断,因此在系统的中断数不足时,/dev/random设备会一直封锁,尝试读取的进程就会进入等待状态,直到系统的中断数充分够用,/dev/ràndom设备可以保证数据的随机性。

/dev/urandom不依赖系统的中断,也就不会造成进程忙等待,但是数据的随机性也不高,所以该随机数的安全性理论上不高。如果应用对安全性要求很高,那么应该使用/dev/random。

三、Tomcat主配置文件详解

1.server.xml组件类别

顶级组件:位于整个配置的顶层,如server。

容器类组件:可以包含其它组件的组件,如service、engine、host、context。

连接器组件:连接用户请求至tomcat,如connector。

被嵌套类组件:位于一个容器当中,不能包含其他组件,如Valve、logger。

<server>
	<service>
	<connector />
	<engine>
	<host>
	<context></context>
	</host>
	chost>
	<context></context>
	</host>
	</engine>
	</service>
</server>

2.server.xml配置文件注释

<?xml version='1.0'encoding='utf-8'?>
<!--
<Server>元素代表整个容器,是Tomcat实例的顶层元素,由org.apache.catalina.5 erver接口来定义,它包含一个<Service>元素,并且它不能做为任何元素的子元素。
port指定Tomcat监听shutdown命令端口,终止服务器运行时,必须在Tomcat服务器所在的机器上发出shutdown命令,该属性是必须的。
shutdown指定修止Tomcat服务得运行时,发给Tomcat服务器的shutdown监听端口的字符串.该属性必须设置。
-->
<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.xm1"/>
	</GlobalNamingResources>
	<!--service服务组件-->
	<Service name="Catalina">
	 <!--Connector主要参数说明(见下表)-->
	 <Connector port="8080"protocol="HTTP/1.1"
		connectionTimeout="20000"
		redirectPort="8443"/>
	<Connector port="8009"protocol="AJP/1.3"redirectPort="8443"/>
	<!--engine,核心容器组件,cata1ina引章,负责通过connector接收用户请求,并处理请求,将请求转至对应的虚拟主机host
	defaultHost指定缺省的处理请求的主机名,它至少与其中的一个host元素的name属性值是一样的
-->
	<Engine name="Catalina"defaultHost="localhost">
	<!--Realm表示存放用户名,密码及ro1e的数据库-->
	<Realm className="org.apache.catalina.realm.LockoutRealm">
	 <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
	</Realm>
	<!--详情常见下表(host参数详解)-->
	<Host name="localhost"appBase="webapps"
		unpackWARs="true"autoDeploy="true">
	 <!--详情常见下表(Context参数说明)-->
	 <Context path=""docBase=""debug=""/>
	 <Valve className="org.apache.catalina.valves.AccessLogvalve"directory="logs"
	 prefix="localhost_access_log"suffix=".txt"
	 pattern="%h %u %t &quot;%r&quot;%s %b"/>
		</Host>
	 </Engine>
	</Service>
</server>

3.connector主要参数说明

参数参数说明
connector将诶受用户请求,类似于http的listten配置监听端口
port指定服务器端要创建的端口号,并在这个端口监听来自客户端的请求
address指定链接器监听的地址,默认为所有地址(0.0.0.0)
protocol连接器使用的协议,支持http和ajp
minProcessors服务器启动时创建的处理请求的线程数
maxProcessors最大可以创建的处理请求的线程数
enableLookups如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名;若为false则不进行DNS查询,而是返回其ip地址
redirectPort指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号
acceptCount指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理
connectionTimeout指定超过的事件数(单位:毫秒)

4.host参数详解

参数参数说明
host表示一个虚拟主机
name指定主机名
appbase应用程序基本目录,即存放应用程序的目录,一般为appBase=“webapps”,相对于CATALINA_HOME而言的,也可以写绝对路径。
unpackWARs如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接从WAR文件中运行应用程序
autoDeploy在tomcat启动时,是否自动部署
xmlValidation是否启动xml的校验功能,一般xmlValidation=“false”
xmlNamespaceAware检测名称空间,一般xmlNamespaceAware=“false”

5.Context参数说明

参数参数说明
Context表示一个web应用程序,通常为WAR文件
docBase应用程序的路径或者是WAR文件存放的路径,也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径
path表示此web应用程序的url的前缀,这样请求的url为http://localhost:8080/path/****
reloadable这个属性非常重要,如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib和/WEB-INF/classes目录的变化,自动装载新的应用程序,可以再不重启tomcat的情况下改变应用程序

四、Tomcat优化

Tomcat默认安装下的缺省配置只适合于测试环境,它可能会频繁出现假死现象需要重启,只有通过不断压则优化才能让它最高效率稳定的运行。优化主要包括三方面,分别为操作系统优化(内核参数优化),Tomcat配置文件参数优化,Java虚拟机(JVM)调优。

在Connector模块中添加

…………
<Connect> port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
#在下面插入以下内容(71行)
minSpareThreads="50"
enableLookups="false"
disableUploadTimeout="true"
acceptCount="300"
maxThreads="500"
URIEncoding="UTF-8"
compression="on"
compressionMinSize="2048"
compressionableMimeType="text/html,text/html,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png"/>

END

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值