(2)conf:主要用来存放tomcat的一些配置文件
(3)lib:存放tomcat依赖的一些jar包
(4)logs:存放tomcat在运行时产生的日志文件
(5)temp:存放运行时产生的临时文件
(6)webapps:存放应用程序
(7)work:存放tomcat运行时编译后的文件,比如JSP编译后的文件
tomcat优化可以有几个方向:配置项的删除,配置参数的修改,jdk参数修改、Tomcat内存优化、Tomcat并发优化、Tomcat缓存优化
web项目中自带的WEB-INF/webxml,
tomcat自带的conf/webxml以及conf/serverxml文件。
因为这些xml文件都会被tomcat解析,所以优化方向是将这三类文件中不必要的配置删除。
tomcat在启动时,会将web项目中WEB-INF/webxml和自己的conf/webxml进行合并,然后在ContextConfig类下的configureContext()统一解析这些内容:
这个只能是在项目中不需要的配置不要放进去,有过期的配置要及时删除,减少tomcat的解析成本。
这是一个处理静态文件的servlet,如果项目中不需要tomcat进行静态文件的处理,可以将其删掉。
这个servlet是用来编译和执行jsp文件的,如果项目中没有jsp文件,可以将其删掉。
项目中没有jsp,关于jsp下面的映射也可以删除:
文件中提供的mime类型非常多,如果有确定项目中不会涉及到的类型,可以删除其映射配置。
如果不需要展示tomcat的欢迎页,可以将其删掉。
下面是tomcat85版本提供的默认listener列表:
作用是在Tomcat初始化时,打印一下Tomcat相关的版本信息以及 *** 作系统和jdk环境信息,可以删掉。
Tomcat启动时,检查APR库,如果存在则加载,这个配置仅当connector的protocol设置为AJP/13时有用,如果非AJP/13,可以删除。
Java运行环境可能导致某些已知位置的内存泄漏或文件锁定,
JreMemoryLeakPreventionListener提供这些情况的解决方案。
作用于全局资源,通过该监听器,初始化标签中定义的全局JNDI资源;
如果没有该监听器,定义的全局资源都不能使用。
如果不使用GlobalNamingResources定义全局资源,可以删除。
Web应用因thread-local导致的内存泄露而要停止时,该监听器会触发线程池中线程的更新。
只有当Web应用(即Context元素)的renewThreadsWhenStoppingContext属性设置为true时,该监听器才有效。
官方文档对renewThreadsWhenStoppingContext配置的解释为:
GlobalNamingResources可以定义全局资源,可以看出,这个tomcat的默认配置是通过读取$TOMCAT_HOME/ conf/tomcat-usersxml实现的。
tomcat-userxml用于定义tomcat管理页面相关配置,如果不登录管理界面可以删掉。
官网中对于这个connector有如下描述:
The AJP Connector element represents a Connector component that communicates with a web connector via the AJP protocol This is used for cases where you wish to invisibly integrate Tomcat into an existing (or new) Apache installation, and you want Apache to handle the static content contained in the web application, and/or utilize Apache's SSL processing
可知当tomcat需要集成到Apache服务器时才使用这个connector,现在一般都用Nginx代替Apache,所以不使用Apache的话这个也可以删掉。
tomcat默认配置包含如下connector:
<Connector port="8009" protocol="AJP/13" redirectPort="8443" />
Realm,可以把它理解成“域”;
Realm提供了一种用户密码与web应用的映射关系,从而达到角色安全管理的作用,tomcat默认的这个realm是和name为UserDatabase的资源绑定的,而该资源在Server元素中使用GlobalNamingResources配置。如果不需要可以删掉。
Valve的意思是“阀门”,不同的Valve有不同的特性,Valve的配置中AccessLogValve的作用是记录其所在容器处理的所有请求,默认配置中的Valve放在Host下,便可以记录该Host处理的所有请求。
AccessLogValve记录的日志就是访问日志,每天的请求会写到一个日志文件里。现在一般记录Nginx访问日志,这个也可以删除。
tomcat是用Java写的,就要运行在jvm上,垃圾处理方式等都要遵循jvm的方式。
tomcat中设置jvm参数在 catalinash(Linux)和catalinabat(windows)中,以JAVA_OPTS变量存储。以catalinash为例:
可以在该变量中添加jvm参数,达到减少gc次数等目标,例如根据tomcat所在服务器修改jvm内存大小等。
参数优化主要是优化severxml中的配置参数,示例serverxml如下:
port:指定一个端口,这个端口负责监听关闭tomcat的请求。
shutdown:指定向端口发送的命令字符串。
sever配置没什么可优化的。
name:指定service的名字。
service配置没什么可优化的。
port:指定服务器端要创建的端口号,并在这个端口监听来自客户端的请求
minProcessors:服务器启动时创建的处理请求的线程数
maxProcessors:最大可以创建的处理请求的线程数
enableLookups:如果为true,则可以通过调用requestgetRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址
redirectPort:指定服务器正在处理>tomcat卡住了,说明程序正在加载启动和配置信息。
解释:tomcat运行过程中需要先启动"startupbat",之后加载项目信息,如果项目信息比较多,如加载xml文件、log4j文件、prepertise配置文件到内存中都需要一定的时间,此时是后台运行的,所以表象就是tomcat卡主了,实际上还是在进行运行的。
备注:如果卡住时间太长没反应,建议重启启动tomcat,如果是正常的几秒、十几秒、一分钟都是可以接受的,建议耐心等待下。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)