Web applications running within Microsoft’s Internet Information Services (IIS) utilize what is known as IIS worker processes. These worker processes run as w3wp.exe, and there can be multiple per computer. It is possible to run IIS on a Windows desktop or Windows server, although it is usually only seen on Microsoft Windows Servers configured as web servers.
What is w3wp.exe / IIS Worker Process?
Web applications on Windows Servers are configured via command line or Internet Information Systems (IIS) Manager. Within IIS you can set up websites and which application pools they are assigned. Multiple websites can be assigned to a single IIS application pool.
To learn more about web sites, web applications, and application pools within IIS, check out the Microsoft docs.
A defined IIS application pool is what becomes a w3wp.exe process when the application starts up as an IIS worker process. They have two basic settings which are related to the version of .NET being used.
An IIS Worker Process (w3wp.exe) handles the web requests sent to the IIS web server for the configured IIS application pool.
IIS application pools also provide a bunch of advanced settings. These impact the behavior of w3wp and your IIS worker process. Including things like what Windows user account it runs as, auto restarting of the process, auto shutdown, and more. It is also possible for one IIS application pool to create multiple IIS worker processes in what is called a web garden.
How to View Running IIS Worker Processes (w3wp.exe)
Via the Windows Task Manager, you can see processes named w3wp.exe. Within the IIS management console, you can view more details. Open IIS manager and on the left side click on the name of your computer. You will then see a similar list of icons on the right as shown in the screenshot below. Double click on “Worker Processes” and you can get a list of which processes are currently running.
On the Worker Processes screen, you can see more details than you would be able to see from Windows Task Manager. You can easily see the name of the IIS application pool and the Process Id for the running w3wp.exe process.
If you want to go even a step further, you can double click on a worker process to see which web requests are currently executing within your IIS worker process.
Warning About Running IIS Application Pools
There is one key thing you need to know about IIS application pools that are a little confusing. Within the IIS management console, you can stop and start application pools. But, just because an IIS application pool is started, there may not be an IIS worker process (w3wp) running. IIS will not start the worker process until the first web request is received.
How to Stop or Disable an IIS Worker Process
If you want to stop w3wp.exe from running, you will want to stop the IIS application pool or disable IIS altogether.
If you want to shut down the IIS web server completely, you will want to stop the Windows Service called “World Wide Web Publish Service.” Be sure to stop it and then modify the “Startup type” to Disabled. If you do not disable it, it will start back up when you restart Windows.
Instead of disabling IIS altogether, you can stop individual IIS application pools within the IIS management console.
Monitoring IIS Worker Processes & ASP.NET Applications
If you have critical ASP.NET web applications running on your web server, it is important to monitor your server, IIS, and applications. It is important to know if w3wp.exe stops running, your server goes down, or if your application is running slow.
If you need help monitoring the performance of your ASP.NET applications, be sure to check out our .NET application performance monitoring solution, Retrace. Retrace can monitor key Windows performance counters and the performance of your application all the way down to the code level. Including slow SQL queries, application errors, and much more.
- How to Use Web.Config customErrors for ASP.NET - April 26, 2017
- Best Practices for Error Handling in ASP.NET MVC - April 25, 2017
- What is NullReferenceException? Object reference not set to an instance of an object - April 17, 2017
- Understanding # of Exceps Thrown / Sec, and How to Find Exceptions - April 17, 2017
- How to Generate C# Random Numbers, Pseudo vs Secure Random Numbers - April 16, 2017