创建ASP.NET监视服务器进程
2008-02-22 09:27:17来源:互联网 阅读 ()
产品简介
您看到过出色的咖啡店店员送咖啡的情景吗?那简直就是咖啡豆、蒸汽和牛奶调和咖啡饮料在跳精彩的芭蕾,跳跃着奔向焦急等候的顾客。然而,即便是最好的店员偶尔也会出现问题。比如两个单子在处理时搞混了,结果送到您面前的是一杯 Soy latte。也可能是杯子上龙飞凤舞的潦草字迹根本就是写错了,或者店员理解错了。有人要了一杯“卞高奇若”(卡普其诺),可怜的店员绞尽脑汁也弄不懂顾客到底要点什么。如果出现了类似的问题,就必须停止处理,然后再重新开始。好的服务员可能会推延一下现有的要求,而优秀的服务员却能够在没人察觉的情况下做到这一点。
Microsoft® ASP.NET 在系统可靠性方面取得了优于其任何竞争对手的巨大进步。然而,就像那位出色的店员一样,ASP.NET 偶尔也会出现问题。幸运的是,ASP.NET 是非常优秀的服务器。它能在后台迅速生成新的进程,然后处理请求。通常只会在请求页面时发生一点用户甚至可能都不会注意到的轻微延迟。
而 ASP.NET 系统的管理员可能需要知道发生了什么。同样,他们也想了解是什么原因导致了进程失败。幸运的是,使用 .NET Framework 类库文档中的 ProcessInfo 和 ProcessModelInfo 类便可获得相关信息。本文中,我们将学习如何创建 ASP.NET HTTP 处理程序,以使用这些对象查看 Web 站点使用的进程的运行状况和关闭状况。另外,我们将创建一个配置节处理程序,这样我们便能够在安装处理程序后对其进行配置。
我们将看到什么?
ASP.NET 进程负责编译和管理所有向 ASP.NET 页面提出的请求。理想状况下,此进程应该始终存在于服务器中:活跃地接收请求、编译页面并返回 HTML。然而,由于存在许多可能影响进程的潜在事件,我们不得不面对 Web 开发的真实状况。开发人员可能未能正确处理内存泄漏或线程问题;服务器可能会丢失与进程的连接;或者甚至会因为在 Web.config 文件的 <processModel> Element 节中对 idleTimeout、requestLimit、memoryLimit 和类似的项目进行了错误的配置而导致出现问题。如果发生了以上任何一种事件,则将创建新的 ASP.NET 辅助进程,新的请求将移交至此进程进行处理。
由于 ASP.NET 进程对页面处理如此重要,因此监视这些进程同样重要。使用 ProcessInfo 和 ProcessModelInfo 类可以查看当前和以前进程的有效期和运行状况。图 1 所示为在本文中创建的进程列表。
图 1:Web 服务器的进程历史记录
ProcessInfo class 存储了给定进程的数据。不得自行创建 ProcessInfo 类,但可以使用 ProcessModelInfo class 来检索 ProcessInfo 对象。表 1 所示为 ProcessInfo 类的重要属性。
表 1:ProcessInfo 类的属性
属性 | 数据类型 | 说明 |
Age | TimeSpan | 进程运行(或曾经运行)的总时间。如果这个值超出了在 Web.Config 文件的 processModel 节中的超时设置,可导致重新启动进程。 |
PeakMemoryUsed | Integer | 此进程所用内存的最大值(以 MB 为单位)。如果这个值超出了在 Web.Config 文件的 processModel 节设置的 memoryLimit 级别设置,可导致进程重新启动。 |
ProcessID | Integer | 操作系统使用此 ID 来标识进程。每个进程均有唯一的 ID(在进程运行时)。 |
RequestCount | Integer | 进程接收到的页面请求的数量。如果这个值超出了在 Web.Config 文件的 processModel 中 requestLimit 的级别设置,可导致进程重新启动。 |
ShutdownReason | ProcessShutdownReason | 此枚举定义进程重新启动的可能原因。有关可能的值,请参阅表 2。 |
StartTime | DateTime | 进程启动的时间。 |
Status | ProcessStatus | 此枚举定义 ASP.NET 辅助进程的当前状态。此值可能为 Alive(活动)、ShuttingDown(进程已接收到关闭请求)、ShutDown(进程已正常关闭)或 Terminated(进程已被迫关闭)。 |
某进程关闭后,关闭原因将被设置为 ProcessShutdownReason Enumeration 中的某一个值。
表 2:进程关闭的可能原因
值 | 说明 |
None | 此值表明进程仍在运行。 |
Timeout | 进程因其生存期超出了在 Web.Config 文件的 processModel 节中设置的超时值而重启。如果这种情况频繁发生,也许应考虑增加超时值。不过,一般来说因这种原因而重新启动可以接受。 |