Tomcat 启动警告:Unable to add the resource at [] to the cache because there was insufficient free space available after evicting expired cache entries 的原因和处理

使用的开发环境,开发工具为 IDEA,Web 容器为 Tomcat 8.5,使用 Maven 作为项目构建工具。

问题现象

每次启动项目都会有一堆的红色警告:

[2018-08-23 03:30:29,501] Artifact TMC:Web exploded: Artifact is being deployed, please wait...
23-Aug-2018 15:30:29.599 警告 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.webresources.Cache.getResource Unable to add the resource at [/WEB-INF/lib/libthrift-0.9.3.jar] to the cache because there was insufficient free space available after evicting expired cache entries - consider increasing the maximum size of the cache
23-Aug-2018 15:30:29.599 警告 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.webresources.Cache.getResource Unable to add the resource at [/WEB-INF/lib/log4j-1.2.15.jar] to the cache because there was insufficient free space available after evicting expired cache entries - consider increasing the maximum size of the cache

貌似不影响项目启动起来,但是很耗时,要等一会才可以。

因为不影响项目启动,又忙的没空,所以一直没管,但是强迫症实在受不了这样的一大片红色警告。

分析

警告内容的大意为:不能添加文件到缓存中,因为没有足够的缓存空间。建议是增大缓存空间的最大值。

原因其实很简单,就是增加缓存空间。但是怎么增加是个问题,所以 search 了一下。

解决

有两种解决方案,我只做了第一种方案的实验。

增加缓存(推荐)

在 Tomcat /conf/context.xml 配置文件的 <Context> 节点中添加:

<Resources cachingAllowed="true" cacheMaxSize="100000"/>

如图:

也就是增大缓存空间到大约 100MB,这个数值需要自己根据文件资源的大小来决定,够用就行,不要设置太大。

解释一下这里的配置,参考官方文档:Apache Tomcat 8 Configuration Reference - The Resources Component

Resources 是资源定义元素,cachingAllowedcacheMaxSize 是公共属性。

  • cachingAllowed:如果此标志的值是 true,将用于静态资源的高速缓存。如果没有指定,该标志的默认值是 true。这个值可以在 Web 应用程序运行时进行更改(例如,通过 JMX)。当缓存被禁用的时候,目前在缓存中的任何资源都从缓存中清除。
  • cacheMaxSize:静态资源缓存的最大大小(以KB为单位)。 如果未指定,则默认值为10240(10兆字节)。 在 Web 应用程序运行时(例如,通过JMX),可以更改此值。 如果缓存使用的内存大于新限制,则缓存将尝试随着时间的推移减小大小以满足新限制。 如有必要,将减少 cacheObjectMaxSize 以确保它不大于 cacheMaxSize / 20

禁用缓存(懒人专属)

通过官方指南可知,其实是可以直接禁用这个缓存的。如果你嫌上面的配置麻烦,则可以使用这种办法。

仍然是在 /conf/context.xml 配置文件的 <Context> 节点中添加 <Resources> 节点,只是配置属性改变了。

<Resources cachingAllowed="false"/>

意思很简单,就是禁用缓存。一招搞定。

总结

一般的 IDE 工具,例如 IDEA 和 Eclipse,在运行 Web 项目的时候,都会把引入的 Tomcat 的配置文件(就是 Tomcat conf 目录的文件)拷贝一份到 IDEA 自己的临时运行空间,这样的话修改 Tomcat 配置文件需要留心 IDE 的缓存。

当然一般重新启动项目,IDE 都会重新拷贝的,有的时候会抽风不拷贝,注意一下就可以了。

如果觉得这对你有用,请随意赞赏,给与作者支持
评论 0
最新评论