Configuring the ASP.NET Worker Process through the 'machine.config' file

转载 2007年09月18日 15:26:00

Configuring the ASP.NET Worker Process through the 'machine.config' file

Unlike classic ASP which run in the same memory space as the IIS, the new ASP.NET runs as a process of its own. This gives us more flexibility, stability and power, especially when combined with the file. Using standard XML notation inside this file, we can attribute our process to do things that will make the Webmaster's job a lot easier. We'll take a close look at the ASP.NET process and the attributes available for us to play with.

Published: Nov 11, 2002
Tested with: ASP.NET 1.1, IIS 5.1
Category: ASP.NET

<script type="text/javascript"> <!-- google_ad_client = "pub-3480949677475568"; google_ad_width = 468; google_ad_height = 15; google_ad_format = "468x15_0ads_al"; //2007-03-30: Article Page Top Links google_ad_channel = "3741709143"; google_color_border = "FFFFFF"; google_color_bg = "FFFFFF"; google_color_link = "0000FF"; google_color_text = "000000"; google_color_url = "008000"; //--> </script> <script src="" type="text/javascript"></script> <iframe name="google_ads_frame" marginwidth="0" marginheight="0" src=";dt=1190100108718&amp;lmt=1190100108&amp;format=468x15_0ads_al&amp;output=html&amp;correlator=1190100108687&amp;channel=3741709143&amp;;color_bg=FFFFFF&amp;color_text=000000&amp;color_link=0000FF&amp;color_url=008000&amp;color_border=FFFFFF&amp;;cc=100&amp;ga_vid=1249941961.1190100109&amp;ga_sid=1190100109&amp;ga_hid=827121238&amp;flash=9&amp;u_h=1024&amp;u_w=1280&amp;u_ah=996&amp;u_aw=1280&amp;u_cd=32&amp;u_tz=480&amp;u_his=1&amp;u_java=true" frameborder="0" width="468" scrolling="no" height="15" allowtransparency="allowtransparency"></iframe>


Unlike classic ASP which runs in the same memory space as the Internet Information Server (IIS), the new ASP.NET runs as a process of its own. This gives us more flexibility, stability and power, especially when combined with the <machine.config> file. Using standard XML notation inside this file, we can attribute our process to do things that will make the Webmaster's job a lot easier. We'll take a close look at the ASP.NET process and the attributes available for us to play with.

The new process: aspnet_wp.exe

With classic ASP it was almost a given that memory leaks and bad software development or hardware configurations would eventually cause the Internet Information Server (IIS) to hang and finally crash. Webmasters would get calls in the middle of the night to deal with a non-servicing web server, or they would proactively reboot the server every so often to release the memory. That's because the classic ASP process runs in the same memory space as IIS does. Things have changed though with .NET. There is now a new process that ASP.NET runs under: aspnet_wp.exe. This process can be configured through the <machine.config> file, and the settings will affect the whole server. This is a webmaster's dream come true, as you can now configure settings through this XML file, like recycling the process after some amount of time, or requests, or memory threshold, or create as many processes as you want depending on how many chips you have on your motherboard. We'll talk about the different settings and how to best use them, so that we can have a faster web server, with more up time.

This new process does not depend on IIS at all. It simply uses IIS to receive requests and then to send out the responses. Therefore, the ASP.NET process can be created or destroyed without affecting IIS at all. In fact, when you first start your computer the process is not created until after some ASP page is requested, even if the IIS starts automatically on reboot.

Task Manager window

If you open your Task Manager you will be able to see the process, along with the regular information that comes with a listing here, like the Process ID number, the CPU usage and time, and total memory being used by it.

The file

On a typical installation, the <machine.config> file is located at C:/WINNT/Microsoft.NET/Framework/v1.0.3705/CONFIG/machine.config. The way to configure the ASP.NET process is through the processModel tag in this file. The tag looks like this with its default settings:

1 <?xml version="1.0" encoding="UTF-8"?>
2 <configuration>
3     <system.web>
4         <processModel
5             enable="true"
6             timeout="Infinite"
7             idleTimeout="Infinite"
8             shutDownTimeout="00:00:05"
9             requestLimit="Infinite"
10             requestQueueLimit="5000"
11             restartQueueLimit="10"
12             memoryLimit="40"
13             webGarden="false"
14             cpuMask="0xffffffff"
15             userName="System"
16             password="autogenerate"
17             logLevel="Errors"
18             clientConnectedCheck="00:00:05"
19             comAuthenticationLevel="Default"
20             comImpersonationLevel="Default"
21             responseDeadlockInterval="00:03:00"
22             responseRestartDeadlockInterval="00:09:00"
23             maxWorkerThreads="25"
24             maxIoThreads="25"
25             serverErrorMessageFile=""
26             pingFrequency="00:00:30"
27             pingTimeout="00:00:05"
28         />
29     </system.web>
30 </configuration>

The complete documentation on the processModel tag can be found at Microsoft. You can take a close look at it on their site, but here is a summary of the attributes available within this tag:

# Attribute Settings Default
1. enable true | false true
2. timeout Infinite | HH:MM:SS Infinite
3. idleTimeout Infinite | HH:MM:SS Infinite
4. shutDownTimeout HH:MM:SS 00:00:05
5. requestLimit Infinite | int Infinite
6. requestQueueLimit int 5000
7. restartQueueLimit int 10
8. memoryLimit int 40
9. webGarden true | false false
10. cpuMask bit mask 0xffffffff
11. userName user | System | Machine System
12. password autogenerate | password autogenerate
13. logLevel All | None | Errors Errors
14. clientConnectedCheck HH:MM:SS | Infinite 00:00:05
15. comAuthenticationLevel Default | None | Connect | Call | Pkt | PktIntegrity | PktPrivacy Default
16. comImpersonationLevel Default | Anonymous | Identify | Impersonate | Delegate Default
17. responseDeadlockInterval Infinite | HH:MM:SS 00:03:00
18. responseRestartDeadlockInterval Infinite | HH:MM:SS 00:09:00
19. maxWorkerThreads int 25
20. maxIoThreads int 25
21. serverErrorMessageFile filename ---
22. pingFrequency HH:MM:SS 00:00:30
23. pingTimeout HH:MM:SS 00:00:05

Enabling the ASP.NET process

1 ...
2 <processModel
3     enable="true"
4 ...

The enable attribute is the most important one, because it decides if the ASP.NET process runs on its own or under IIS. The default is true, meaning that it runs on its own. This is the best option, as it allows us to reap the benefits of a separate configurable process. If it is set to false, then the rest of the settings here do not matter as they are ignored. Keep in mind that if you change this option either way, you will have to stop and restart IIS for it to take effect.

Recycling the process

There are 5 ways to recycle the ASP.NET process.

1 ...
2 <processModel
3     timeout="168:00:00"
4 ...

The first involves the timeout attribute, which simply creates a new process after the amount of time specified as a value. For example, the above setting will automatically start a new process after 168 hours, or one week. The time clock starts right after the first request is made, because the process is actually created when the first request to the ASP.NET engine is made. This setting can be extremely useful in scenarios where there is a slow leak in memory and performance, and periodic IIS resets are needed.

1 ...
2 <processModel
3     requestLimit="10000"
4 ...

A second way is to use the requestLimit attribute and give it an Integer value. A value of 10,000 like above, will start a new process after 10,000 requests have been made. This can be useful if our web server's performance degrades after a set number of requests, instead of simply some amount of time past.

1 ...
2 <processModel
3     memoryLimit="50"
4 ...

A third way is to let your system watch how much memory the process is consuming. In the above example, the attribute memoryLimit is set to 50, which means that if the process uses more than 50% of total system memory then the process is killed , a new one is created and all existing requests are reassigned to the new one. This is extemely helpful is cases where a memory leak is present, no matter how slow the leak is.

1 ...
2 <processModel
3     responseDeadlockInterval="00:03:00"
4 ...

A fourth way of doing this is by using the responseDeadlockInterval attribute. The time setting above of 3 minutes will restart the process if two things happen: there are requests in the queue, but there have not been any responses for the last 3 minutes.

1 ...
2 <processModel
3     pingFrequency="00:00:30"
4     pingTimeout="00:00:05"
5 ...

The fifth and last way of recycling the process, is to use the pingFrequency and pingTimeout attributes in conjunction. The system pings the ASP.NET process at the pingFrequency interval, and restarts it if there is no response within the pingTimeout time interval.

Shutting down the process

There are 2 ways of shutting down the ASP.NET process.

1 ...
2 <processModel
3     idleTimeout="00:30:00"
4 ...

The first way of doing it is by using the idleTimeout attribute. If the server has not served any requests for the amount of time that we specify here, then it automatically shuts down the process. If a new one comes in after that, a new process is started automatically. The example shown will shut down the existing process after 30 minutes of inactivity. This might be useful if you have long times of inactivity, for example during the early hours of the morning, and you want to use the system resources for other tasks during those times, such as database stored procedures, or email chunking.

1 ...
2 <processModel
3     shutDownTimeout="00:00:05"
4 ...

The second way is by using the shutDownTimeout attribute. This is used as a last resort, when the ASP.NET process tries to gracefully shut down and it fails. In that case, after the time that we set here has passed, a low level kill command is called on the process to make sure it is killed. This is useful in those cases where the process has crashed and is not responding anymore. The setting above will force a kill after 5 seconds.

Reducing the queue: checking if the client is still connected

1 ...
2 <processModel
3     clientConnectedCheck="00:00:05"
4 ...

Users can get impatient. If our web server is slow to respond to their requests, they might click on the same link many times. Even if only the last request is finally returned to them, the server still processes all the previous ones. That's wasted server resources. Even worse, the user might abandon their session with our server, but the server still has a queue from that user. One way we can help our server, is to have it check requests in the queue and throw away the ones which the client is no longer connected with them. In the example above, the server will check each request every 5 seconds after it has entered the queue, to see if the user who made it is still connected. If the user is not, the server throws away that request.


We have seen how ASP.NET now works as a separate worker process, and the benefits that can give us. We've also seen how to best use the process by attributing it through the <machine.config> file. I encourage you to take a closer look at the rest of the other attributes not mentioned in detail here, as they might be beneficial to you depending on your circumstances.

如何:以用户帐户运行 aspnet_wp.exe



Visual Studio 版本

Visual Basic




Visual Web Developer




要设置计算机从而以用户帐户运行 ASP.NET 辅助进程,请执行下列步骤。


显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于现用设置或版本。若要更改设置,请在“工具”菜单上选择“导入和导出设置”。有关更多信息,请参见 Visual Studio 设置


以用户帐户运行 aspnet_wp.exe

  1. 打开 machine.config 文件,该文件位于计算机上安装运行库的路径下的 CONFIG 文件夹中。

  2. 查找 <processModel> 节并将 userpassword 属性更改为要使 aspnet_wp.exe 在其下运行的用户帐户的名称和密码。

  3. 保存 machine.config 文件。

  4. 在 Server 2003 上,默认情况下已安装 IIS 6.0。相应的辅助进程是 w3wp.exe。若要在 IIS 5.0 模式中将 aspnet_wp.exe 作为辅助进程运行,必须执行下列步骤:

    1. 从“开始”菜单中单击“管理工具”,然后选择“Internet 信息服务”。

    2. 在“Internet 信息服务”对话框中,右击“网站”文件夹并选择“属性”。

    3. 在“网站属性”对话框中选择“服务”。

    4. 选择“以 IIS5.0 隔离模式运行 WWW 服务”。

    5. 关闭“属性”对话框和“Internet 服务管理器”。

  5. 打开 Windows 命令提示窗口,通过运行下面的命令重置服务器:



    net stop iisadmin /y
    net start w3svc
  6. 查找 Temporary ASP.NET Files 文件夹,它应当位于与 CONFIG 文件夹相同的路径中。右击 Temporary ASP.NET Files 文件夹,并从快捷菜单中选择“属性”。

  7. 在“临时 ASP.Net 文件属性”对话框中,选择“安全性”选项卡。

  8. 单击“高级”按钮。

  9. 在“临时 ASP.Net 文件的高级安全设置”对话框中,单击“添加”按钮。

  10. 在“选择用户、计算机或组”对话框中,在“输入要选择的对象名称”框中输入用户名(格式为:域名/用户名),然后单击“确定”。

  11. 在“临时 ASP.Net 文件的权限项”对话框中,授予用户“完全控制”,然后单击“确定”以关闭“临时 ASP.Net 文件项”对话框。

  12. 此时将出现“安全性”对话框,询问是否确实要更改系统文件夹的权限。单击“是”。

  13. 单击“确定”以关闭“临时 ASP.NET 文件属性”对话框。 配置文件(Machine.config、Web.config、App.config)

Machine.config 1.该文件在Windows目录下\\framework\[version]\Config\ 2.为了提高性能,该文件只包含不同于默认值的设置...
  • ydm19891101
  • ydm19891101
  • 2016年03月28日 09:02
  • 1544


  • azkaser
  • azkaser
  • 2009年12月23日 17:33
  • 6211


  • flashlm
  • flashlm
  • 2007年08月31日 13:45
  • 4296

IIS Worker Process已停止工作

使用IIS7之后出现”IIS Worker Process已停止工作”错误,解决方法: 1.安装FrameWork1.1 sp1 2.如果调用了c++的非托管dll,则可能是指针问题。  针对自己的代...
  • tianyu0910
  • tianyu0910
  • 2011年03月19日 11:20
  • 3015


  • hekailing
  • hekailing
  • 2015年09月08日 20:08
  • 4150


  • Poechant
  • Poechant
  • 2012年01月18日 00:18
  • 10741

IIS Express Worker Process已停止工作

最近在学习牛腩新闻发布系统的时候,遇到了一个很头疼的问题——IIS Express Worker Process已停止工作并已关闭。          具体的样式如下:...
  • u010375663
  • u010375663
  • 2014年10月26日 11:36
  • 5598


前言 上篇是在看ngx_worker_process_cycle()中的一个插曲,这篇继续,现在还不可能做到全知全解,只能随着源码的深入慢慢地了解。 worker进程如何循环工作 Nginx采用信...
  • fzy0201
  • fzy0201
  • 2014年03月16日 10:29
  • 2208

worker process 3577 exited on signal 11

测试方法: [] 本站提供程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负! debian:~# uname -a Linux debian 2.6.18-6-6...
  • HalsonHe
  • HalsonHe
  • 2016年01月17日 00:31
  • 2038

IIS Express Worker Process 已停止工作 使用vs2013调试mvc出错

今天给一个新同事安装机器环境,装好vs2013和sql之后,我把现在的项目发给他,他去运行机器的时候,提示这个,IIS Express Worker Process已停止工作,开始我以为是iis没有安...
  • zx943336311
  • zx943336311
  • 2017年07月11日 13:42
  • 180
您举报文章:Configuring the ASP.NET Worker Process through the 'machine.config' file