Scott Ferguson wrote (2011-04-05 01:25):
> 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
> VS
>   {thread1} WebApp[/foo] start
>   {thread2} WebApp[/foo] start
>   ...
> In other words, an actual simultaneous start compared to an erroneous 
> restart.

Yes, there are multiple WebApp starts in the log:
[2011-04-05 15:03:51.905] WebApp[production/webapp/default/ROOT] starting
[2011-04-05 15:03:59.062] WebApp[production/webapp/default/ROOT] starting

(the app takes more than 8 seconds to initialize, so they are concurrent 

I haven't configured the default logs to include the thread, but from my 
own logging, I can see that the first start is in 
Thread[http://*:8080-343,5,main] and the second in  
Thread[http://*:8080-349,5,main], in different classloaders

I caught the above starts with "finer" logging level. Should I extract 
the part around this time and send to you, Scott?



resin-interest mailing list

Reply via email to