Skip to content

Knowledgebase

Diagnosing IIS HTTP 503 Service Unavailable

servers

Investigate IIS HTTP 503 by checking whether the application's worker process is available and why requests are being rejected. Restarting the pool repeatedly can hide the first failure while leaving the cause unresolved.

01 Find the unavailable component

  1. Record the affected hostname, URL and failure time. Check whether other websites on the server still work.
  2. In IIS Manager, select the website and identify the application pool it uses. Open Application Pools and inspect that pool's status.
  3. Review the request's status and substatus in the IIS logs. A 503.0 can indicate an unavailable application pool; other substatuses require their own interpretation.
  4. If the request is absent from the site log, inspect the HTTPERR logs, normally under C:\Windows\System32\LogFiles\HTTPERR. Record the reason field and matching timestamp.
  5. Check System and Application events for Windows Process Activation Service, worker-process crashes, identity failures or missing application dependencies.
  6. Compare the pool identity, password changes for custom accounts, filesystem permissions, runtime requirements and recent deployment changes with the last working state.

02 Handle rapid-fail protection

IIS can take an application pool out of service after repeated worker-process failures. Treat that as evidence of a recurring problem. Keep rapid-fail protection in place while you identify the crash or startup cause; disabling it can create a continuous failure loop.

After correcting the identified problem, start the affected pool and test a controlled request. If it stops again, capture the new events and escalate with the application version and failing component. Avoid recycling unrelated sites or restarting the entire server without assessing their workloads.

03 Check load and queues when the pool is running

A running pool does not rule out every 503 cause. Correlate the specific substatus or HTTPERR reason with request limits, queues and resource pressure. Increase a limit only after confirming that the application and server can handle the intended load.

04 Example: inspect IIS pool state without starting or recycling it

Open an elevated PowerShell session on the IIS server. AppCmd is installed with the IIS management components. Replace ExamplePool with the application pool used by the failing website. These commands list state and existing worker processes.

Code or configuration example
& "$env:windir\System32\inetsrv\appcmd.exe" list apppool "ExamplePool"
& "$env:windir\System32\inetsrv\appcmd.exe" list wp

Read the result: A stopped pool helps explain some HTTP 503 cases, but it does not explain why the pool stopped. Check the matching Windows events for rapid-fail protection, identity logon failures, configuration errors or startup crashes. An on-demand pool may have no worker process before its first request.

Confirm the website-to-application-pool mapping before making a change. Do not repeatedly disable rapid-fail protection or recycle every pool on a shared server. Correct the specific cause, start only the intended pool through the approved workflow and retest the original URL.

Common questions

Does a started IIS website prove its application pool is healthy?

No. The site's configuration can be started while the pool is stopped, disabled or failing to serve requests.

Should I change the pool to LocalSystem to fix access?

Identify the missing permission or invalid credential and correct that scope. Giving the application broad system privileges is not a suitable general repair.

Was this answer helpful?

Need a little more help?

Our support team can help you find the next step.

Contact support