IIS App Pool Shows “Running” but Site Becomes Unresponsive Until Manual Recycle

Captain56022 25 Reputation points
2025-12-09T20:10:48.14+00:00

Hello,

We're dealing with a super frustrating IIS issue and I'm hoping someone here has seen this before...

THE PROBLEM:

Our Application Pool shows as "Running" in IIS Manager, but the site is completely DEAD. Not responding at all. The only fix? Manual recycle or IIS restart. 🤦‍♂️

THE WEIRD PART:

❌ NOT happening during high traffic

❌ NOT a resource issue (CPU, RAM, Disk, Network all normal/low)

✅ Happens SPECIFICALLY when there's little to NO traffic

✅ Completely random - once every few days

✅ Unpredictable - no pattern we can find

Screenshots:
Please your help

Developer technologies | ASP.NET Core | ASP.NET API

Locked Question. You can vote on whether it's helpful, but you can't add comments or replies or follow the question.

3 answers

Sort by: Most helpful
  1. Anonymous
    2025-12-10T10:47:43.01+00:00

    Hello Captain56022,

    Thanks for sharing the context. Based on the settings you shared and what I saw when researching the internet, this could be what’s happening:

    Your application pool seems to be entering Rapid-Fail Protection mode because the worker process (w3wp.exe) may be crashing repeatedly. The default for IIS is 5 failures in 5 minutes. 

    Even if the pool still shows “Running” in the GUI, once those failures trigger the protection IIS will stop serving requests, so the site becomes effectively unreachable. 

    If I were you, here’s what I’d try to check first (just to confirm or rule out this cause):

    • Look into Windows Event Viewer (System and Application logs) around the time the outage happened, check for “worker process terminated unexpectedly,” “fatal communication error,” or “application pool … disabled due to a series of failures.” That’ll show whether Rapid-Fail Protection was triggered. 
    • If you find such failures, you could temporarily disable Rapid-Fail Protection (for testing only) to see if the site stays up, but this is only a diagnostic step, not a fix. 
    • Ultimately you need to identify what’s causing the crashes (bad code, config, dependencies, module load issues, identity problems, etc.) and fix that root problem. 

    Hope this helps.

    Was this answer helpful?

    2 people found this answer helpful.
  2. AI answer

    2025-12-09T20:11:10.83+00:00

    It sounds like you're experiencing an issue where the IIS application pool is showing as "Running" but the site becomes unresponsive, requiring a manual recycle or restart of IIS to restore functionality. Here are some potential troubleshooting steps and considerations based on similar issues:

    1. Check Application Pool Settings: Ensure that the application pool is configured correctly. Sometimes settings like idle timeout or recycling settings can cause unexpected behavior. You might want to check if the application pool is set to recycle after a certain period of inactivity.
    2. Review Event Logs: Check the Windows Event Viewer for any warnings or errors related to IIS or the application pool. This can provide clues about what might be happening when the site becomes unresponsive.
    3. Use Debug Diagnostics Tool: Consider using the Debug Diagnostics Tool to analyze the application pool when it becomes unresponsive. This tool can help identify memory leaks or other issues that might not be apparent through standard monitoring.
    4. Monitor Requests: Enable Request Monitor in IIS to track incoming requests and see if there are any patterns or specific requests that lead to the application pool becoming unresponsive.
    5. Analyze Performance Metrics: Although you mentioned that CPU, RAM, Disk, and Network usage are normal, consider using Performance Monitor (Perfmon) to gather more detailed metrics during the times the application pool becomes unresponsive. This can help identify any unusual spikes or trends.
    6. Check for Deadlocks: If your application is using databases or external resources, check for potential deadlocks or long-running queries that might be causing the application to hang without consuming significant resources.
    7. Review Code Changes: If this issue started occurring after recent code changes, review those changes for any potential issues that could lead to unresponsiveness under low traffic conditions.

    Since the problem is random and occurs specifically during low traffic, it may be related to how the application handles idle states or resource management when not under load.


    References:

    AI-generated content may be incorrect. Read our transparency notes for more information.

    Was this answer helpful?

    1 person found this answer helpful.
  3. Paul Thomas 80 Reputation points
    2026-10-08T13:06:32.1133333+00:00

    If the site still hangs with Rapid-Fail Protection disabled, the fastest way to find the cause is to capture a memory dump while it's hung, before you recycle, and look at what every thread is waiting on. A recycle throws that evidence away.

    1. Get dotnet-dump

    On a machine with the .NET SDK: dotnet tool install --global dotnet-dump. On a server without the SDK, download the single-file executable from https://aka.ms/dotnet-dump/win-x64.

    2. Capture a dump while the site is unresponsive

    Run an elevated command prompt on the server:

    dotnet-dump ps
    dotnet-dump collect -p <PID> -o C:\dumps\hang.dmp
    

    Pick the right process: with in-process hosting (the default for ASP.NET Core on IIS) the app runs inside w3wp.exe, and with out-of-process hosting it runs in dotnet.exe or your app's .exe. IIS Manager → Worker Processes shows the PID for each application pool.

    3. Look at what the threads are waiting on

    dotnet-dump analyze C:\dumps\hang.dmp
    > parallelstacks
    > syncblk
    > threadpool
    
    • parallelstacks groups threads with the same call stack, so you'll see something like "40 threads all waiting in YourService.GetOrders".

    syncblk shows which thread owns a lock other threads are waiting for.

    threadpool shows whether work is piling up in the queue (thread pool starvation).

    You can also open the .dmp file in Visual Studio and use the Parallel Stacks window.

    What to look for with this "only when quiet" pattern

    A background job (a timer or IHostedService) that takes a lock and then blocks on a call without a timeout.

    Blocking on async code (.Result, .Wait()) that ties up thread pool threads.

    An outbound call (database, HTTP, Redis) whose connection was dropped while idle, for example by a firewall, and that has no timeout, so the first request after a quiet period waits forever.

    I reproduced the first pattern in a .NET 9 app: a timer took a lock and then blocked, and every request needing that lock hung while other endpoints still responded. In the dump, syncblk showed the one thread owning the lock, and parallelstacks showed that thread inside the timer callback with four request threads waiting on the same lock. That points straight at the line to fix.

    If you capture a dump, feel free to post the parallelstacks output here and I'll help read it.

    Was this answer helpful?