当前位置:首页 » 硬盘大全 » tomcat启动缓存可用空间不足
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

tomcat启动缓存可用空间不足

发布时间: 2023-08-28 16:54:31

A. 怎样调节tomcat缓存大小

Tomcat有很多方面,我从内存、并发、缓存四个方面介绍优化方法。
一.Tomcat内存优化

Tomcat内存优化主要是对 tomcat 启动参数优化,我们可以在 tomcat 的启动脚本 catalina.sh 中设置 JAVA_OPTS 参数。
JAVA_OPTS参数说明
-server 启用jdk 的 server 版;
-Xms java虚拟机初始化时的最小内存;
-Xmx java虚拟机可使用的最大内存;
-XX:PermSize 内存永久保留区域
-XX:MaxPermSize 内存最大永久保留区域
服务器参数配置

现公司服务器内存一般都可以加到最大2G ,所以可以采取以下配置:

JAVA_OPTS='-Xms1024m -Xmx2048m -XX:PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m'

配置完成后可重启Tomcat ,通过以下命令进行查看配置是否生效:
首先查看Tomcat 进程号:

sudo lsof -i:9027

我们可以看到Tomcat 进程号是 12222 。
查看是否配置生效:

sudo jmap – heap 12222

我们可以看到MaxHeapSize 等参数已经生效。、
二.Tomcat并发优化

1.Tomcat连接相关参数

在Tomcat 配置文件 server.xml 中的 <Connector ... /> 配置中

1>参数说明

minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为 10
maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为 75
acceptCount:允许的最大连接数,应大于等于 maxProcessors ,默认值为 100
enableLookups:是否反查域名,取值为: true 或 false 。为了提高处理能力,应设置为 false
connectionTimeout:网络连接超时,单位:毫秒。设置为 0 表示永不超时,这样设置有隐患的。通常可设置为30000 毫秒。
其中和最大连接数相关的参数为maxProcessors 和 acceptCount 。如果要加大并发连接数,应同时加大这两个参数。
web server允许的最大连接数还受制于操作系统的内核参数设置,通常 Windows 是 2000 个左右, Linux 是 1000 个左右。

2>Tomcat中的配置示例
<Connector port="9027"
protocol="HTTP/1.1"
maxHttpHeaderSize="8192"
minProcessors="100"
maxProcessors="1000"
acceptCount="1000"
redirectPort="8443"
disableUploadTimeout="true"/>

2.调整连接器connector的并发处理能力

1>参数说明

maxThreads 客户请求最大线程数
minSpareThreads Tomcat初始化时创建的 socket 线程数
maxSpareThreads Tomcat连接器的最大空闲 socket 线程数
enableLookups 若设为true, 则支持域名解析,可把 ip 地址解析为主机名
redirectPort 在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口
acceptAccount 监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads )
connectionTimeout 连接超时
minProcessors 服务器创建时的最小处理线程数
maxProcessors 服务器同时最大处理线程数
URIEncoding URL统一编码

2>Tomcat中的配置示例

<Connector port="9027"
protocol="HTTP/1.1"
maxHttpHeaderSize="8192"
maxThreads="1000"
minSpareThreads="100"
maxSpareThreads="1000"
minProcessors="100"
maxProcessors="1000"
enableLookups="false"
URIEncoding="utf-8"
acceptCount="1000"
redirectPort="8443"
disableUploadTimeout="true"/>

3.Tomcat缓存优化

1>参数说明

c ompression 打开压缩功能
compressionMinSize 启用压缩的输出内容大小,这里面默认为2KB
compressableMimeType 压缩类型
connectionTimeout 定义建立客户连接超时的时间. 如果为 -1, 表示不限制建立客户连接的时间

2>Tomcat中的配置示例
<Connector port="9027"
protocol="HTTP/1.1"
maxHttpHeaderSize="8192"
maxThreads="1000"
minSpareThreads="100"
maxSpareThreads="1000"
minProcessors="100"
maxProcessors="1000"
enableLookups="false"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
connectionTimeout="20000"
URIEncoding="utf-8"
acceptCount="1000"
redirectPort="8443"
disableUploadTimeout="true"/>

4.参考配置

1>旧有的配置

参考网络对服务器做过如下配置,拿出来分享下:

<Connector port="9027"
protocol="HTTP/1.1"
maxHttpHeaderSize="8192"
maxThreads="1000"
minSpareThreads="25"
maxSpareThreads="75"
enableLookups="false"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
connectionTimeout="20000"
URIEncoding="utf-8"
acceptCount="200"
redirectPort="8443"
disableUploadTimeout="true" />

后来发现在访问量达到3 百万多的时候出现性能瓶颈。
2>更改后的配置

<Connector port="9027"
protocol="HTTP/1.1"
maxHttpHeaderSize="8192"
maxThreads="1000"
minSpareThreads="100"
maxSpareThreads="1000"
minProcessors="100"
maxProcessors="1000"
enableLookups="false"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
connectionTimeout="20000"
URIEncoding="utf-8"
acceptCount="1000"
redirectPort="8443"
disableUploadTimeout="true"/>

B. Tomcat服务器如何清理缓存

  • 打开tomcat服务安装目录,可以看到所有的相关文件目录

C. Tomcat服务器如何清理缓存

Tomcat服务器如何清理缓存

Tomcat因为其开源,免费,运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能而深受程序员的喜爱,那么如何清理tomcat服务器缓存呢?
Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5 支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。目前最新版本是7.0。
清理服务器缓存可以消除某些未知的错误,如果你运行以前编译的项目有错,而没有及时将服务器缓存清理掉,错误依旧可能发生在新的项目中:所以,清理缓存是很有必要的:

步骤/方法
1
首先打开Myeclipse8.5,这里我使用的是Myeclipse8.5,所以以8.5版本来做说明:如果你使用的是Eclipse或者Myeclipse,依旧可以使用此方法:

2
第一种方法:打开一个项目,这里我打开的Mail项目,然后点击Myeclipse菜单栏中的project-选择clean:如下图所示:
点击这里可以不用进入tomcat服务器直接清理缓存

3
上面的方式虽然简便,不过使用起来,还是不能够彻底的清理tomcat缓存。

4
第二种方法:
进入tomcat的安装目录进行清理缓存,这里我使用的tomcat6.0,使用的tomcat是免安装的,解压缩后直接使用,建议大家也用这个版本,而非安装版本,如果你使用的是安装版,方法与解压版完全一样。

5
然后点击进入解压后的tomcat,找到work文件夹,。此文件下有个catalina目录(tomcat小名叫catalina),work目录下的文件都可以删除。
work目录下有一个catalina目录。

6
删除work中的tomcat目录后,缓存已经删除。
7
如果我们先前发布的一个项目有错,大家都知道,tomcat发布的项目在webapps下,如果以前的项目有错那么运行新的项目肯定还是会有错的。以前的项目遗留的错误,这时,只要将以前的项目删除掉就行了。

8
进入webapps将以前遗留的项目删除就行了,也可以将所有的项目清空,因为Myeclipse的工作空间中还有以前的项目,我们只需要重新发布,tomcat的webapps目录中就会将工作空间中的项目自动重新加载到webapps中。是不是很方便呢?

参考资料:网络经验
参考链接:http://jingyan..com/article/b24f6c82e76af886bfe5dad3.html
———————————————分割线——————————————————
满意请采纳(⊙o⊙),以上是软硬谦施团队为你带来的回答。
如果有什么不懂的可以追问,以后有什么问题可以向我提问或者向我的团队提问。(*^__^*) 嘻嘻……

D. 1 如何优化Tomcat

(1)bin:主要用来存放命令,.bat是windows下,.sh是Linux下
(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/web.xml,
tomcat自带的conf/web.xml以及conf/server.xml文件。
因为这些xml文件都会被tomcat解析,所以优化方向是将这三类文件中不必要的配置删除。

tomcat在启动时,会将web项目中WEB-INF/web.xml和自己的conf/web.xml进行合并,然后在ContextConfig类下的configureContext()统一解析这些内容:

这个只能是在项目中不需要的配置不要放进去,有过期的配置要及时删除,减少tomcat的解析成本。

这是一个处理静态文件的servlet,如果项目中不需要tomcat进行静态文件的处理,可以将其删掉。

这个servlet是用来编译和执行jsp文件的,如果项目中没有jsp文件,可以将其删掉。

项目中没有jsp,关于jsp下面的映射也可以删除:

文件中提供的mime类型非常多,如果有确定项目中不会涉及到的类型,可以删除其映射配置。

如果不需要展示tomcat的欢迎页,可以将其删掉。

下面是tomcat8.5版本提供的默认listener列表:

作用是在Tomcat初始化时,打印一下Tomcat相关的版本信息以及操作系统和jdk环境信息,可以删掉。

Tomcat启动时,检查APR库,如果存在则加载,这个配置仅当connector的protocol设置为AJP/1.3时有用,如果非AJP/1.3,可以删除。

Java运行环境可能导致某些已知位置的内存泄漏或文件锁定,
提供这些情况的解决方案。

作用于全局资源,通过该监听器,初始化标签中定义的全局JNDI资源;
如果没有该监听器,定义的全局资源都不能使用。
如果不使用GlobalNamingResources定义全局资源,可以删除。

Web应用因thread-local导致的内存泄露而要停止时,该监听器会触发线程池中线程的更新。
只有当Web应用(即Context元素)的属性设置为true时,该监听器才有效。
官方文档对配置的解释为:

GlobalNamingResources可以定义全局资源,可以看出,这个tomcat的默认配置是通过读取$TOMCAT_HOME/ conf/tomcat-users.xml实现的。
tomcat-user.xml用于定义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/1.3" 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参数在 catalina.sh(Linux)和catalina.bat(windows)中,以JAVA_OPTS变量存储。以catalina.sh为例:

可以在该变量中添加jvm参数,达到减少gc次数等目标,例如根据tomcat所在服务器修改jvm内存大小等。

参数优化主要是优化sever.xml中的配置参数,示例server.xml如下:

port:指定一个端口,这个端口负责监听关闭tomcat的请求。
shutdown:指定向端口发送的命令字符串。
sever配置没什么可优化的。

name:指定service的名字。
service配置没什么可优化的。

port:指定服务器端要创建的端口号,并在这个端口监听来自客户端的请求
minProcessors:服务器启动时创建的处理请求的线程数
maxProcessors:最大可以创建的处理请求的线程数
enableLookups:如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址
redirectPort:指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号
acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理
maxConnections:达到这个值之后,将继续接受连接,但是不处理,能继续接受多少根据acceptCount的值
minSpareThreads:最小空闲线程数
connectionTimeout:指定超时的时间数(以毫秒为单位)
官网8.5版本connector使用连接类型如下:

查看Connector源码:

可知默认协议使用的是Http11NioProtocol,即NIO方式。
tomcat默认连接池有限制,可以为connector配置自己的连接池,例如:

在连接池中可以根据项目自定义最大线程数量。

name:属性用于日志和错误信息,在整个Server中应该唯一
defaultHost:defaultHost属性指定了默认的host名称,当发往本机的请求指定的host名称不存在时,一律使用defaultHost指定的host进行处理;因此defaultHost的值,必须与Engine中的一个Host组件的name属性值匹配
没什么可优化的。

name:指定虚拟主机的主机名,一个Engine中有且仅有一个Host组件的name属性与Engine组件的defaultHost属性相匹配;
注:一般情况下,主机名需要是在DNS服务器中注册的网络名,但是Engine指定的defaultHost不需要

appBase:应用程序基本目录,即存放应用程序的目录

unpackWARs:指定了是否将war文件解压,如果为true,则通过解压后的目录运行该Web应用;如果为false,则直接使用WAR文件运行Web应用

autoDeploy:是否自动部署,Tomcat运行期间会用一个线程定时检查,如果有新的web工程会自动部署。
autoDeploy生产环境之下可以改成false,减少tomcat的负担。
autoDeploy有需要注意的点,如果为true,拷贝war到webapp下面,tomcat自动解压并部署。但是停掉tomcat拷贝新的war包过去,tomcat不会解压新包并后覆盖旧目录,因为tomcat直接使用了之前解压过的目录。官网有描述:
If you redeploy an updated WAR file, be sure to delete the expanded directory when restarting Tomcat, so that the updated WAR file will be re-expanded (note that the auto deployer, if enabled, will automatically expand the updated WAR file once the previously expanded directory is removed).

docBase:代表应用程序或war文件存放的路径,这个可以自由指定,例如d:/study

path:

表示此web应用程序的url的前缀,这样请求的url为 http://localhost:8080/path/ **

reloadable:如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib和/WEB-INF/classes目录的变化,自动装载新的应用程序,可以在不重起tomcat的情况下改变应用程序

生产环境中可以把reloadable设置为false。

className:指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口
没什么可优化的

className:规定了Valve的类型;例如tomcat默认的是AccessLogValve。
directory:指定日志存储的位置,默认日志存储在 TOMCAT_HOME/logs目录下,可以看到如下所示的日志文件。
没什么可优化的。

Tomcat内存优化主要是对 tomcat 启动参数优化,我们可以在 tomcat 的启动脚本 catalina.sh 中设置 java_OPTS 参数。

现公司服务器内存一般都可以加到最大2G ,所以可以采取以下配置:
JAVA_OPTS=’-Xms1024m -Xmx2048m -XX: PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m’

配置完成后可重启Tomcat ,通过以下命令进行查看配置是否生效:
首先查看Tomcat 进程号:sudo lsof -i:9027

我们可以看到Tomcat 进程号是 12222 。
查看是否配置生效:sudo jmap – heap 12222
我们可以看到MaxHeapSize 等参数已经生效。

在Tomcat 配置文件 server.xml 中的
<Connector port="9027"
protocol="HTTP/1.1"
maxHttpHeaderSize="8192"
minProcessors="100"
maxProcessors="1000"
acceptCount="1000"
redirectPort="8443"
disableUploadTimeout="true"/>

maxThreads 客户请求最大线程数
minSpareThreads Tomcat初始化时创建的 socket 线程数
maxSpareThreads Tomcat连接器的最大空闲 socket 线程数
enableLookups 若设为true, 则支持域名解析,可把 ip 地址解析为主机名
redirectPort 在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口
acceptAccount 监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads )
connectionTimeout 连接超时
minProcessors 服务器创建时的最小处理线程数
maxProcessors 服务器同时最大处理线程数
URIEncoding URL统一编码

compression 打开压缩功能
compressionMinSize 启用压缩的输出内容大小,这里面默认为2KB
compressableMimeType 压缩类型
connectionTimeout 定义建立客户连接超时的时间. 如果为 -1, 表示不限制建立客户连接的时间