tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mark Thomas <ma...@apache.org>
Subject Re: Intermittent JSP Caching/Compiling Issue while under load
Date Thu, 07 Nov 2019 16:43:30 GMT
> Mark,
> 
> On 11/7/19 06:40, Mark Thomas wrote:
>> On 06/11/2019 20:04, Mark Thomas wrote:
>>> I've found the root cause.
>>>
>>> When checking the timestamps of JSPs, the JSP engine (because it
>>> has to access all resources via the Servlet API) requests a URL
>>> for the JSP, opens a connection to the URL and then checks the
>>> last modified time. This goes directly to the on-disk file.
>>>
>>> When reading the content, the request goes via the static
>>> resource cache because we can intercept the call to
>>> ServletContext.getResourceAsStream()
>>>
>>> The problem is the following sequence: - request for JSP - no
>>> change in JSP timestamp found - cache re-validated (for 5s by
>>> default) - JSP is modified (within 5s) - request for JSP (within
>>> 5s) - change in JSP timestamp found - JSP content read (sees
>>> cached version rather than new version)
>>>
>>> So we end up with the old version of the JSP content with the
>>> updated last modification time.
>>>
>>> I'm currently looking at options to return a URL for the resource
>>> where we can intercept the call to
>>> URLConnection.getLastModified().
> 
>> Fixed in: - master for 9.0.28 onwards - 8.5.x for 8.5.48 onwards
> 
> Would you mind checking similar logic for triggering the reloading of
> a whole context?

No at all.

> I'm not sure it's happened to me in quite a while (I'm currently on
> 8.5.x), but in the past I know for a fact that I've been caught in a
> loop where my context will reload many many times after what feels
> like one single change (e.g. one set of class file updates, a new .jar
> file, etc.). Usually, if I leave things alone for a while (maybe 2
> minutes?) Tomcat will settle down and stop repeatedly reloading the
> context, but I usually just kill it and restart the container because
> all that reloading causes the service to perform really poorly. After
> a restart, all is well.

Doesn't look to be related. See HostConfig.checkResources(). The checks
are all directly to the file system. Also. reloading the web application
will clear the resources cache.

Mark

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Mime
View raw message