你知道 ASP.NET配置文件machine.config ?

来源:互联网 发布:阿里云代理ip 编辑:程序博客网 时间:2024/05/16 23:54

 

在学习webservice 的 过程中,

作为webservice 的服务器,会遇到 线程数量瓶颈。

machine.config  和 web.config 是分别针对 服务器整体 和 单个应用程序的 配置文件。

 

下面来学习下:

介绍
与传统的ASP不同的是,ASP.NET不是运行在IIS的地址空间,而是有自己的进程。该进程可以通过XML配置文件machine.config进行配置。

配置文件:machine.config
在安装时如果没有改变安装路径,machine.config会被安装在C:/WINNT/Microsoft.NET/Framework/v1.0.3705/CONFIG/machine.config。与进程相关的配置是在文件的“processModel ”中。下面是缺省的设置:

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>

详细的描述请参见Microsoft的MSDN网站
 
设置项明细表:

#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

 

启用ASP.NET独立进程


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

enable设置指示ASP.NET应该启用它的独立进程而不是运行在IIS进程中。该项缺省的值是true(启用独立进程)。如果为false(在IIS进程中运行),后续的设置将会被忽略。

自动重启ASP.NET进程
有5种方法可以重启ASP.NET进程

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

通过timeout设置项,在运行了指定的时间后重新创建一个新的进程实例。在上面的设置中在运行了168小时后(1周)会重新创建一个进程以取代现有的进程。不过需要注意的是,计时是当接收到第一个请求时,因为ASP.NET的进程是在处理第一个请求时创建的。这个设置非常有用,如果程序中有轻微的内存泄漏而需要周期性的重置IIS。

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

通过requestLimit设置项,在处理了指定数量的请求后,创建一个新的进程。这个对Web服务器的性能是由于处理了过多的请求后降低非常有帮助。

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

通过memoryLimit设置项,比如50,这意味着当进程使用的内存占到系统总的内存的50%时,进程会被取消,而一个新的进程会创建出来,所有现有的请求会由这个新的进程进行处理。这个对内存泄漏非常有帮助。

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

通过responseDeadlockInterval设置项,比如3分钟,当有新的请求但没有任何响应超过3分钟时,重新启动进程

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

通过pingFrequency和pingTimeout设置项,系统会在pingFrequency指定的周期内探询ASP.NET进程,如果在pingTimeout时间内没有响应,重启该进程

 

停止ASP.NET进程
有两个方法可以自动停止进程

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

通过idleTimeout设置项,如果在指定的时间内没有任何请求,进程会自动退出。在一个新的请求到来后,再重新启动进程。

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

通过shutDownTimeout设置项,当ASP.NET进程需要退出但是失败后,系统会在等待指定的时间后强行终止该进程。

用户连接状态检查
1 ... 
2 <processModel 
3     clientConnectedCheck="00:00:05" 
4 ...

在Web服务器响应比较慢时,用户可能会重复点击同一个URL。这样会增加服务器负担。甚至用户可能会取消请求,但是服务器可能还在处理该用户的请求队列。为此,我们可以指示服务器检查用户的连接状态,如果用户已经不在线,清除该用户所有的请求。在上面的设置中,服务器每5秒会检查每个在队列中的请求,如果用户已经离线,服务器会清除该请求。

结论


ASP.NET现在工作在一个独立的进程中。我们可以通过machine.config配置文件来使得该进程更加稳定和高效。

原创粉丝点击