Tomcat 운영 중에 cache가 부족하면 아래와 같은 에러 메시지가 발생합니다.
경고 [main] org.apache.catalina.webresources.Cache.getResource [/WEB-INF/classes/static/js/jquery-ui-1.12.1.base/images/ui-icons_a0a0a0_256x240.png]에 위치한 리소스를 웹 애플리케이션 [/wsm]을(를) 위한 캐시에 추가할 수 없습니다. 왜냐하면 만료된 캐시 엔트리들을 없애버린 이후에도 여유 공간이 충분하지 않기 때문입니다. 캐시의 최대 크기를 증가시키는 것을 고려해 보십시오.
증상
cache 부족 시 저는 두 가지의 현상이 발생했습니다.
1. CPU 100%
Tomcat 시작과 동시에 CPU 점유율이 100%가 되고, 컴퓨터가 거의 멈춤 상태가 되었으며 아무리 기다려도 CPU 점유율이 내려오지 않았습니다.
2. 엄청난 양의 로그
위의 로그 상의 png 파일뿐만 아니라 거의 모든 파일에 대해 에러 메시지가 발생했습니다.
해결방법
Tomcat 설치 경로/conf/context.xml에 아래 내용 추가
<Resources cachingAllowed="true" cacheMaxSize="100000"/>
Tomcat 공식 문서를 보면(http://tomcat.apache.org/tomcat-8.0-doc/config/resources.html) 아래와 같이 나와있습니다.
cacheMaxSize
The maximum size of the static resource cache in kilobytes. If not specified, the default value is 10240 (10 megabytes). This value may be changed while the web application is running (e.g. via JMX). If the cache is using more memory than the new limit the cache will attempt to reduce in size over time to meet the new limit. If necessary, cacheObjectMaxSize will be reduced to ensure that it is no larger thancacheMaxSize/20.
cache의 최대 크기는 10MB로 잡혀있는데, cache를 사용 안 할 수도 있지만 size를 늘리는 게 일반적인 가이드입니다.
+ 추가사항
Maximum memory pool의 사이즈를 늘려주면 해결이 되기도 하는데, 아마 cacheMaxSize의 설명에 "웹 애플리케이션이 실행되는 동안 변경될 수 있습니다."에 해당되는 내용인 것 같습니다.