On 04/04/2011 10:02 AM, Mattias Jiderhamn wrote:
> Scott Ferguson wrote (2011-04-04 18:47):
>> On 04/04/2011 12:43 AM, Mattias Jiderhamn wrote:
>>> While evaluating Resin 4.0.16 we are seeing something that makes me 
>>> really concerned. It appears as if after a redeploy there can be two 
>>> instances of our main app running.
>>> I was made aware of this by noticing that timed servlets (<run-at 
>>> ... />) were having concurrency issues and logging the same event 
>>> twice within the same second.
>>> This made me add some extra logging in a <load-on-startup/> servlet, 
>>> and I can actually see that at some reploys, the same web app is 
>>> initialized twice - in different, concurrent threads and different 
>>> classloaders.
>>> For example one instance may be initialized by 
>>> Thread[http://*:8080-776,5,main] and at the same time (give or take 
>>> a few seconds) another one by Thread[resin-366,5,main].
>>> I cannot deliberately recreate it by simply redeploying (which makes 
>>> it less likely to be a configuration issue). But it happens about 
>>> daily on our test server; possibly issuing requests on a session in 
>>> the app while redeploying is a factor.
>>> We are not using versioning.
>>> dependency-check-interval is set to 20 seconds.
>>> The "extra" app does not appear in the admin console.
>>> How can we figure out what is going on here???
>> Are you using version="true" and/or versioned web-apps? With 
>> versioned web-apps, Resin is supposed to have two versions running at 
>> the same time while it migrates sessions from the old version to the 
>> new version.
> As stated above, we are not using versioning.
> (And if we we're, should the old version be re-initialized when 
> deploying a new version...?)

Do you have logs for these events? The WebApp start/stop should be 
logged at the info level and be in the jvm-default.log.

I can't yet see how this is happening, though I have found a related 
issue with 503s.

The main thing I'd be looking for is:

   {thread1} WebApp[/foo] start
   {thread2} WebApp[/foo] stop
   {thread2} WebApp[/foo] start
   {threadX} WebApp[/foo] stop


   {thread1} WebApp[/foo] start
   {thread2} WebApp[/foo] start

In other words, an actual simultaneous start compared to an erroneous 

-- Scott

resin-interest mailing list

Reply via email to