文章标签 ‘IIS’
[转载]发现并解决ASP.NET内存耗尽(OOM),让服务器”永不重启” – koumi-blogs – 博客园. ========下面的一堆文字为了说明一件事情—.NET程序,内存溢出,如何控制.主要是堆HEAP大小如何控制以及优化.以减轻GC突发性负担及这个时候服务器当机的可能*. 对 于大型程序,完全依赖GC是不现实的,对于高负载服务器,往往我们80%的堆都由自己的析构函数接管,并辅助以自行设计的bufferpool接管堆释放 工作以达到HEAP可控的目的,减少CPU突发性负荷(CPU尖峰).虽然不像C那样可以控制的那么完全,但是多多少少对OOM的发生起到抑制作用,深入 下去可以完全避免OOM……好了IF性能和内存开销没什么追求的 THEN 就不必看了,,,, ELSE GO ===================== 1.下个windbg,去baidu google一下即可.. 2.sos.dll 这个框架自带,只所以提下,是让大家有搜索的关键字用. 3.泄露,对于.net程序,主要是堆泄露,对于大型服务器程序,需要严格排查OOM(内存泄露)的问题,节约服务器GC开销,内存开销,cpu开销,提高支撑 4.配置环境变量 添加系统变量 _NT_DebugGER_EXTENSION_PATH C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 这个是为了能够找到sos.dll 5.实战 启动windbg,开启调试窗口,加载用于.NET调试所使用的sos.dll .load sos 回车之后无任何显示表示无任何错误,这个时候就可以运行调试命令了. 需要说明的是.打头的是windbg自带命令,!打头的命令是sos.dll调试命令. 显示GC堆占用情况命令 !dumpheap -stat 大概会显示这些:对象表,对象数量,每个对象内存占用情况…等,如下: ——————— 0:000> !dumpheap -stat Statistics: MT Count TotalSize Class Name 7a787cc4 1 12 System.IO.FileSystemWatcher+FSWAsyncResult 7a75904c 1 12 System.Diagnostics.OrdinalCaseInsensitiveComparer 7a7575cc 1 [...]
[转载]asp.net 域名欺骗式开发 – 路过秋天 – 博客园. 前言:如果觉得本文对你有帮助,就热情点下推荐 一:用VS的IDE自带的IIS开发 概说:在VS2005中,我们很多时候开发,都是采用IDE自带的IIS开发,通常有两种开发方式。 1:WebSite: 如果建的是早期的webSite 网站,我们运行后总是会多一层目录的地址,如图 2:WebApplication: 如果vs2005打了sp1补丁或在vs2008/vs2010中,新建的可以是webApplication,运行后是没有多出一层目录的,如图 问题: 如果建的是WebSite,由于多出一层目录结构,所以在开发中极为不便的,问题多多~! 这里用一个小小示例说明问题: 我们同样为上面的方式加上一个A链接: //WebSite html 方式:<a href=”/Default.aspx”>WebSite 网站</a> //WebApplication html 方式:<a href=”/Default.aspx”>Application应用程序</a> 说明: 按常理,我们都知道,“/”代表根目录,编写这样的html应该是没啥问题的,可是,这种情况在WebSite方式下出现错误了 我们点击链接,出错如下图: 问题怎么解决? 如果你故意要在代码中处理这种根目录的问题,那处理起来是相当的麻烦的。 然而WebApplication下则是正常的,所以,现在一般开发都建WebApplication项目。 那我们今天怎么解决WebSite这种多出来的目录问题?那就是使用系统的IIS进行开发了。 二:使用系统的IIS开发 要进行系统IIS开发,我们需要进行以下的设置 1:设置自定义服务器为自己的局域网IP地址,设为127.0.0.1也行 对于WebSite的项目属性 WebApplication的项目属性 说明:在IIS定位到相应开发目录之后,记得点一下“创建虚拟目录”成功之后才能使用。 2:相应的IIS网站目录需要定位到开发目录 定位目录到开发网站的目录 设置成IP访问形式 设置的成果 设置完成后,我们再浏览原来的WebSite或WebApplication站点时,就是IP地址访问的形式了 这时候你再用之前的点击链接,就不会出现错误了,而且也没有多出一层目录出来了,如图 结段结言: 至此,通过使用系统IIS进行开发,就可以避免了多出一层目录出来的情况,同时我们也换成了IP开发。 那在实现项目中,很多时候,我们开发都可能要根网站域名挂勾,而网站域名当然很多时候跟Cookie有关了 于是,接下来一步就是重点,使用域名欺骗进行开发。 三:域名欺骗开发 1:域名欺骗设置 我们打开以下路径:C:\WINDOWS\system32\drivers\etc,可以看到一个host文件,如图 用记事本打开,输出一行:127.0.0.1 www.abc.com/ 这里意思是:如果在浏览器输入www.abc.com/将自定转向本机网站,设置如图 2:项目属性设置 将项目属性的IP改成域名 WebSite网站属性,如图 效果浏览:看,可以域名的方式欺骗访问了,如图 [...]
[转载]从一个WEB请求说开去(三) – 大河 – 博客园. 由于最近一段时间忙的我晕头转向,所以一直没时间继续我的WEB请求之旅,深感抱歉。 开篇之前,我必须向大家道个歉,由于我的知识水平有限,对ASP.NET没有一个系统性的认知,所以不对的地方请朋友们不吝赐教。说真的,我特别怕由于我的认知不足而误导大家,请大家一定要带着脑袋以批判的角度来阅读拙作。砖头准备好了吗?开始。 上文我们主要描述了iis6.0的两个核心组件WAS和Worker Progress,而本文重点讲述一下WEB请求在工作进程中都经历了什么,下面我把描述工作进程的图示放大,如下: 我们知道,当一个有效的WEB请求到达HTTP.SYS后,发现没有相应有效的工作进程,则HTTP.SYS会告诉WAS(svchost.exe),以 为之创建并启动一个工作进程(w3wp.exe)。在启动工作进程的过程中加载ISAPI(非托管代码)以及CLR(托管代码),然后在工作进程中创建应 用程序域。其实如上一系列操作只是为WEB请求准备好其运行环境。 当一个WEB请求进入已经准备好的工作进程边界(工作进程从HTTP.SYS的应用程序池对应的消息队列中取出该WEB请求),那此时首先会经过 ISAPI FILTER的处理,比如修改http报头和URL等,具体功能参见上文。接下来就会将处理的WEB请求交给ISAPI EXTENSION。那么ISAPI EXTENSION会干什么呢?我们先看下图: 我们从上图可以看出,它就是一个应用程序扩展名的映射,即文件扩展名与处理该文件的应用程序的一个映射表,接下来我们看看具有aspx扩展名的文件是由哪个应用程序集处理(dll)的,如下图: 看到了吗?其实也就告诉我们对于aspx扩展名的文件,要交给aspnet_isapi.dll处理,其实大部分文件都映射到了 aspnet_isapi.dll,也就是说大部分动态的web请求文件都交由程序集aspnet_isapi.dll来处理。对于静态文件比如jpg、 js、以及css等都会直接将文件返回给客户端。注意:aspnet_isapi.dll是一个非托管的Win32动态库,里面封装了很多用于与web进 行交互的函数,它的处理速度那是相当的快。另外它被加载到了工作进程中,也就是说非托管的aspnet_isapi.dll与托管的web应用都处于一个 工作进程中,这显然会加快其处理速度。跨进程访问是要付出代价的,所以我们不必为此担心。那么如何才能调用aspnet_isapi.dll提供的一系列 服务呢,这就引出了ISAPIRuntime,它的主要功能就是负责ISAPI扩展的非托管代码与托管代码之间的沟通与交互。您只要记住这点就行了,具体 实现细节我认为没必要深究。如果您对此感兴趣可以借助reflector.exe等工具进行跟踪研判。 我们的WEB请求走到到哪儿了,没错,它经过ISAPI顺利的进入到了ASP.NET通道接下来他会一直走啊走,经过HttpApplication、httphandles等经过处理后将其响应返回给http.sys,最终到达客户端浏览器。 本来关于IIS6.0还有很多说不完的话题,比如ASP.NET application的生命周期,以及web page的生命周期、以及如何自定义httpmodules,如何自定义httphandles等等,网上这方面的资料已经很多了,我也不再赘述。 其实写到此我只大概介绍了IIS6.0的三个核心组件HTTP.SYS、WAS以及Worker Progress,另外两个(Inetinfo.exe和IIS MetaBase)只是轻描淡写,如果有时间我会继续说说关于这两个核心组件的内容,另外会顺带说说SSL。 为了给大家一个关于WEB请求之旅的整体印象,我会在下一篇做个总结。如有疏漏之处还望朋友们多多海涵。
[转载]w3wp进程发生死锁ISAPI ‘..\aspnet_isapi.dll’ 报告它自身有问题,原因’Deadlock detected’ – 欢迎光临赵玉开的技术博客 – 博客园. ISAPI ‘c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll’ 报告它自身有问题,原因如下: ‘Deadlock detected’ 这个问题,字面意思是程序发生死锁了,它会导致w3wp进程重启。通常这个问题不好查到原因。我知道两个可能导致此问题的实例 1. 在程序中使用了lock或者ReaderWriterLock,锁资源发生了争用 下面是一小段代码: view source print? 1 //_rwLock的类型是ReaderWriterLock 2 _rwLock.AcquireWriterLock(100); 3 DoSomething(); 4 _rwLock.ReleaseWriterLock(); 这行代码是有问题的,如果在DoSomething()方法执行中发生一次异常,这个写锁就释放不了了,再次请求时就会等待直到超时,在多线程的情况下就会发生死锁’Deadlock detected’ 正确的写法应该是: view source print? 01 try 02 { 03 _rwLock.AcquireWriterLock(100); 04 DoSomething(); 05 } 06 finally 07 { 08 if (_rwLock.IsWriterLockHeld) 09 _rwLock.ReleaseWriterLock(); 10 } 这样就算在DoSomething方法执行时发生了异常,也可以释放写锁。 [...]
[转载]使用IIS内置压缩功能,增加网站访问速度 – Capricornus – 博客园. HTTP 压缩是在Web服务器和浏览器间传输压缩文本内容的方法。HTTP压缩采用通用的压缩算法如gzip等压缩HTML、JavaScript或CSS文件。压缩的最大好处就是降低了网络传输的数据量,从而提高客户端浏览器的访问速度。当然,同时也会增加一点点服务器的负担。Gzip是比较常见的一种HTTP 压缩算法。 默认的IIS中是有GZIP.dll组件的,我们只要开启即可.操作步骤如下: 1.开启HTTP压缩功能 在IIS中右键网站属性->服务选项卡->选中<压缩应用程序文件><压缩静态文件>两个选项.如图 2.在Web服务扩展中增加一个新扩展 右键Web服务扩展->增加一个新的Web服务扩展->要求的文件C:\WINDOWS\system32\inetsrv\gzip.dll ->设置扩展状态为允许.如图 3.修改IIS配置文件 (注意: 一定要先备份MetaBase.xml文件) 1).打开C:\Windows\System32\inetsrv\MetaBase.xml文件. 2).使用ctrl+f查找 Location =”/LM/W3SVC/Filters/Compression/gzip”与 Location =”/LM/W3SVC/Filters/Compression/deflate” 3).将两个节点的配置修改为如下配置 代码 <IIsCompressionScheme Location =”/LM/W3SVC/Filters/Compression/deflate” HcCompressionDll=”%windir%\system32\inetsrv\gzip.dll” HcCreateFlags=”0″ HcDoDynamicCompression=”TRUE” HcDoOnDemandCompression=”TRUE” HcDoStaticCompression=”true” HcDynamicCompressionLevel=”9″ HcFileExtensions=”htm html txt js css swf xml” HcOnDemandCompLevel=”9″ HcPriority=”1″ HcScriptFileExtensions=”asp aspx dll exe” > </IIsCompressionScheme> <IIsCompressionScheme Location =”/LM/W3SVC/Filters/Compression/gzip” HcCompressionDll=”%windir%\system32\inetsrv\gzip.dll” HcCreateFlags=”1″ HcDoDynamicCompression=”TRUE” HcDoOnDemandCompression=”TRUE” [...]


