• 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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

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

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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
    
    • 1
    • 2

    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
    
    • 1
    • 2
    • 3

    /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。

    
    	
    	
    	
    	
    	
    	
    	chost>
    	
    	
    	
    	
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2.server.xml配置文件注释

    
    
    <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 name="Catalina">
    	 
    	 <Connector port="8080"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">
    	 
    	 <Context path=""docBase=""debug=""/>
    	 <Valve className="org.apache.catalina.valves.AccessLogvalve"directory="logs"
    	 prefix="localhost_access_log"suffix=".txt"
    	 pattern="%h %u %t "%r"%s %b"/>
    		Host>
    	 Engine>
    	Service>
    server>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    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模块中添加

    …………
     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"/>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    END

  • 相关阅读:
    pip安装skimage的方法
    【5G 接口协议】GTP-U协议介绍
    优麒麟2204文件管理器peony扩展初开发
    SpringBoot+MyBatis和MyBatisPlus+vue+ElementUl实现批量删除 我只能说太简单了
    Nvidia-Xavier-NX配置
    JAVA集合(一)Collection接口
    Flink重分区算子解析 - StreamPartitioner
    Python 实现获取【昨天】日期
    SpringBoot集成ElasticSearch(ES)
    [机缘参悟-92]:《本质思考》- 本质思考的9种训练方法
  • 原文地址:https://blog.csdn.net/tu464932199/article/details/126022141