0

I'm running an ASP.NET application on IIS 7.

The server blissfully hums along until

  1. An Application_Start event is raised
  2. All requests made by currently connected users give a 'Connection_Abandoned_By_ReqQueue' error in httperrX.log
  3. An Application_End event is raised

It looks like a worker process recycle, right? But w3wp never died, a new w3wp never started, and no recycle was logged.

What could have caused this? And how do I prevent it from happening?


Technical details:

  • Windows Server 2008 R2
  • IIS 7
  • .Net v4.0 app pool with classic pipeline
  • Maximum 1 worker process with overlap enabled

Update

I'm encountering this situation while load-testing a web application.

Throughout this testing process, I've recycled and restarted the web server many times. Apparently, this changes the cryptographic key being using to obtain web resources, as explained here: “Padding is Invalid and cannot be removed” exception on WebResource.axd. The testing software isn't smart enough to change its requests (without significant finagling) in response to a new key.

The result of all this was that several requests were failing with .Net cryptographic exceptions. I determined I didn't care about those requests and removed them from the test. This seems to take care of the bizarre pseudo-recycling this question is about.

Two things remain unknown:

  1. Is the recycling caused by erroring requests to WebResource.axd or by any requests to WebResource.axd?
  2. Why does this cause the pseudo-recycle instead of a regular recycle or no recycle at all? The behavior is still undocumented.
2
  • Any events in the event log? can you turn on HTTP api error logging to see if it's one particular request causing the error? (see support.microsoft.com/kb/820729)
    – Jim B
    Jan 27, 2011 at 15:55
  • @Jim B: 'Connection_Abandoned_By_ReqQueue' is from the http error log. Every pending request has that error at the time when Application_Start is raised.
    – Mashmagar
    Jan 27, 2011 at 16:14

2 Answers 2

2

Anytime a file is changed in the application folder, this can trigger an recycle of an application pool. Antivirus real-time monitors are notorious for this, but there is actually quite a large list of potential offenders. Check the following from Tess Ferrandez:

http://blogs.msdn.com/b/tess/archive/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles.aspx

In particular, you can enable the ASP.Net Health Monitoring Event to record the activity to the application event log, with the reason for the restart.

0

An Application_Start Event will only be raised once, at the beginning of an applications life. The Connection_Abandoned_By_ReqQueue is not something I've heard of, but sounds like a web application is doing something unusual in the Global.asax handler for Application_Start.

The Application_End event is being fired due to the exception causing the application to quit; marking the end of the applications lifecycle.

I assume you're aware of the ASP .Net application lifecycle as it applies to IIS6 and IIS7, if not:

IIS 6.0 - http://msdn.microsoft.com/en-us/library/ms178473.aspx
IIS 7.0 - http://msdn.microsoft.com/en-us/library/bb470252.aspx

These articles may help clear any confusion if you've not looked at this stuff before.

To resolve the issue, I would begin by identifying the faulting application. If you are able to, take a look at the Global.asax handlers, otherwise, check for updates to the application.

It could also be a case of memory corruption according to one thread I've read on the exception you are getting, but I'm not sure where you would begin to investigate if that's the case.

8
  • Only one application is running - I'm load testing it. An Application_Start Event should only be raised once, which is why I'm so confused. The application's already running and I get another Application_Start Event. I'm really a software developer, so my IIS understanding is spotty.
    – Mashmagar
    Jan 27, 2011 at 16:19
  • You say the application is already running; do you mean the site is running in IIS, or that a request has already been made for a site resource? An application could be "running" in IIS for days, but if no resources from the site have been requested, then the Application_Start event will not be raised.
    – Jaymz
    Jan 27, 2011 at 16:23
  • Requests have definitely been made for site resources. It's ~forty minutes into a load test when this happens. Application_Start was already triggered at the beginning. Online documentation suggests that Application_Start should only happen when the worker process gets its first request. But the event is raised again on the worker process that's already been running for forty minutes. I've confirmed it's the same process by logging the process id.
    – Mashmagar
    Jan 27, 2011 at 16:33
  • Then I would agree with what you initially stated, the App Pool is recycling. As to what's causing it, what is the Queue Length set to in the Advanced Settings of the App Pool? By default, I think it's 1000, and once this limit is reached, new requests receive a 503 error. I'm not sure what the behaviour of ASP .Net is during this time though... could potentially cause a new Application_Start event, not sure.
    – Jaymz
    Jan 27, 2011 at 16:49
  • The Queue Length is set to 1000. I ruled that out since I'm not receiving a 503 error. But if you think ASP .Net could be hiding that, I'll try changing the length and rerunning to see what happens.
    – Mashmagar
    Jan 27, 2011 at 16:54

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .