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
    评论
### 回答1: org.apache.catalina.startup.ho 是Tomcat服务器中的一个Java包,用于启动Tomcat服务器时加载主机配置的相关类。其中,“org”表示组织名,“apache”表示公司或组织的名称,“catalina”则是Tomcat服务器的名字,“startup”表示启动时所需的类,“ho”则代表host(主机)的缩写。 ### 回答2: org.apache.catalina.startup.ho 是 Apache Tomcat 的一部分,它是 Tomcat 的启动过程中的一个重要类。具体来说,org.apache.catalina.startup.ho 类是一个用于解析并执行 Host 配置文件的类。 在 Apache Tomcat 中,每个虚拟主机(host)通过一个配置文件进行配置。这个配置文件通常被命名为 "server.xml",它位于 Tomcat 的配置文件目录中。 org.apache.catalina.startup.ho 类负责解析这些配置文件,并将配置内容应用于 Tomcat 的运行时环境。 org.apache.catalina.startup.ho 类主要负责以下几个功能: 1. 解析和验证 Host 配置文件的语法和结构。它会检查配置文件中的各个元素是否遵循正确的语法和结构要求。 2. 将解析后的配置信息存储在相应的对象中,以备后续使用。这些对象包括 Host 对象,用于表示虚拟主机的配置信息,以及相关的 Context 对象,用于表示单个Web应用程序的配置信息。 3. 根据配置文件的内容,初始化和配置 TomcatHost 对象和 Context 对象。这些对象将在 Tomcat 运行时负责处理请求和响应。 总之,org.apache.catalina.startup.ho 类在 Apache Tomcat 启动过程中具有重要作用。它负责解析和执行 Tomcat 虚拟主机的配置文件,将配置信息应用于运行时环境,确保 Tomcat 能够正确处理请求并提供相应的服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值