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

http://www.xefteri.com/articles/show.cfm?id=14

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
33,717 views

<script type="text/javascript"> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script> name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-3480949677475568&dt=1190100108718&lmt=1190100108&format=468x15_0ads_al&output=html&correlator=1190100108687&channel=3741709143&url=http%3A%2F%2Fwww.xefteri.com%2Farticles%2Fshow.cfm%3Fid%3D14&color_bg=FFFFFF&color_text=000000&color_link=0000FF&color_url=008000&color_border=FFFFFF&ref=http%3A%2F%2Fblog.csdn.net%2FRainyLin%2Farchive%2F2007%2F07%2F29%2F1715292.aspx&cc=100&ga_vid=1249941961.1190100109&ga_sid=1190100109&ga_hid=827121238&flash=9&u_h=1024&u_w=1280&u_ah=996&u_aw=1280&u_cd=32&u_tz=480&u_his=1&u_java=true" frameborder="0" width="468" scrolling="no" height="15" allowtransparency="allowtransparency">

Introduction

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:

#AttributeSettingsDefault
1.enabletrue | falsetrue
2.timeoutInfinite | HH:MM:SSInfinite
3.idleTimeoutInfinite | HH:MM:SSInfinite
4.shutDownTimeoutHH:MM:SS00:00:05
5.requestLimitInfinite | intInfinite
6.requestQueueLimitint5000
7.restartQueueLimitint10
8.memoryLimitint40
9.webGardentrue | falsefalse
10.cpuMaskbit mask0xffffffff
11.userNameuser | System | MachineSystem
12.passwordautogenerate | passwordautogenerate
13.logLevelAll | None | ErrorsErrors
14.clientConnectedCheckHH:MM:SS | Infinite00:00:05
15.comAuthenticationLevelDefault | None | Connect | Call | Pkt | PktIntegrity | PktPrivacyDefault
16.comImpersonationLevelDefault | Anonymous | Identify | Impersonate | DelegateDefault
17.responseDeadlockIntervalInfinite | HH:MM:SS00:03:00
18.responseRestartDeadlockIntervalInfinite | HH:MM:SS00:09:00
19.maxWorkerThreadsint25
20.maxIoThreadsint25
21.serverErrorMessageFilefilename---
22.pingFrequencyHH:MM:SS00:00:30
23.pingTimeoutHH:MM:SS00: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.

Conclusion

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.

 

http://msdn2.microsoft.com/zh-cn/library/bakfs900(VS.80).aspx

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

 

本主题适用于:

Visual Studio 版本

Visual Basic

C#

C++

J#

Visual Web Developer

速成版

标准版

专业团队版

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

Note注意

显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于现用设置或版本。若要更改设置,请在“工具”菜单上选择“导入和导出设置”。有关更多信息,请参见 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 命令提示窗口,通过运行下面的命令重置服务器:

    iisreset

    --或者--

    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 文件属性”对话框。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值