编辑人员注释:本文章由
Windows Azure 网站团队的项目经理Apurva Joshi
撰写。

您有多少次在半夜被叫醒去解决一个仅需重新启动网站即可解决的问题?要是可以自动检测一些状况并自动恢复该有多好!

随着 Windows Azure
网站 (WAWS)
最新更新的推出,我们已尝试解决这些问题。我们在
“始终可用”功能之上新增了一些增强功能。通过这些增强功能,系统可以自动回收托管您的
Web 应用程序的 worker
进程。我们称之为“自愈”功能。下面说明了该功能的工作原理:

您仅需在网站的根 web.config
文件中定义触发器,并配置这些触发器被触发时要执行的操作即可。大致上配置部分的结构如下:

注意:
此功能与“始终可用”功能一样,仅适用于标准实例。

我们来分解下每个场景的可用选项。

(本文末尾提供了所有支持元素和属性的详细说明。)

场景 1 –“基于请求计数回收”

设想以下场景:您的应用程序已处理 X
个请求,您需要在 Y
时间内自动回收该应用程序。您知道短时间内涌入大量请求会导致您的应用程序伸缩性下降。您希望能够检测到此情况,并且自动回收 worker
进程和记录事件日志。

您仅需编辑应用程序的根 web.config
文件,以下提供了配置示例。(如果已存在 web.config
文件,请将<monitoring>部分复制到现有
<system.webServer> 部分下)

有了以上配置,
10分钟内处理了1000个请求,
worker 进程将被回收。它还会在 eventlog.xml
文件(可从您的 Web
根目录的 Logfiles
文件夹中获取)中记录事件日志。记录事件日志可以帮助您查找自愈网站的发生次数,并且为故障排除或根源分析提供重要取证。收到第一个请求时,我们会启动 timeInterval
定时器,然后启动发生次数计数。如果在 timeInterval
过期之前该计数超过最大值,我们将采取措施。如果
timeInterval 过期,我们将重置该定时器和计数。在以上配置下,这样做可能会出现以下情况:

00:00:00 –
第一个请求到达

00:09:59 – 998
个请求得到处理

00:10:00 –
定时器过期,重置为 0

00:10:01 – 999
个请求得到处理

在此场景下,第一个或第二个 timeInterval
窗口中并未发生 1000
个请求,因此未采取任何措施。

注意:如果您的网站有多个实例,仅会重新启动触发此触发器的实例,而不是全部实例。

eventlog.xml
文件中记录的事件示例

场景 2 –“基于缓慢请求回收”

设想以下场景:您的应用程序的性能开始下降,并且几个页面的显示速度开始减缓。您希望可以检测此情况,并且自动回收 worker
进程。

您仅需编辑应用程序的根 web.config
文件,以下提供了配置示例。(如果已存在 web.config
文件,请将<monitoring>部分复制到现有
<system.webServer> 部分下)

当检测到最后2分钟20
个请求
的执行时间超过
45 秒
时,以上配置将回收该
worker 进程必须注意的一点是,slowRequest
的触发器在每个请求执行结束时进行评估,因此将 timeInterval
设置为大于 timeTaken
的值也同等重要。

注意:如果您的网站有多个实例,仅会重新启动触发此触发器的实例,而不是全部实例。

eventlog.xml
文件中记录的事件示例

场景 3 –“基于
HTTP 状态代码记录事件(或回收)”

设想以下场景:当您的网站开始抛出特定的 HTTP
状态代码、子状态代码或 win32
状态代码时,您希望收到有关此情况的通知。您可以选择回收或仅需在 eventlog.xml
文件(可从您网站内容根目录的 Logfiles
文件夹中获取)中记录事件

您仅需编辑应用程序的根 web.config
文件,以下提供了配置示例。

30秒内检测到
10 个请求
导致出现
HTTP 状态代码 500
子状态代码 100
,以上配置将在
eventlog.xml 文件中记录该事件。

注意:如果您的网站有多个实例,仅会记录触发此触发器的实例的事件,而不是全部实例。或者,也可以选择回收,而不仅仅是记录事件。默认情况下,回收会记录事件。

eventlog.xml
文件中记录的事件示例

场景 4 –“基于内存限制采取自定义操作(或回收/日志记录)”

设想以下场景:您正在对您网站中的内存泄露进行故障排除并且要执行以下自定义操作:生成内存转储、发送电子邮件通知,或生成内存转储并回收进程等。

您仅需编辑应用程序的根 web.config
文件,以下提供了配置示例。

当检测到 worker
进程已达到
800 MB
专用字节时,以上配置会执行自定义操作以运行 procdump.exe
,并且生成迷你内存转储。自愈功能不会触发某些来自
http.sys(内核驱动程序,不会因为请求而成为 worker
进程管道)的 HTTP
错误代码。此类状态代码的示例包括 304、302、400(很多但并非全部)、503,等等。

注意:如果您的网站有多个实例,仅会为触发此触发器的实例生成内存转储,而不是全部实例。或者,也可以

选择执行发送电子邮件等自定义操作。此外还要注意,默认情况下,procdump.exe
在您网站的根目录 (d:\home)
下是不存在的–
您的网站进行 xcopy
部署时需要将它复制过去。

用于回收操作类型的 eventlog.xml
文件中记录的事件示例

最后,如果您想要配置特定页面/URL
上的触发器,可以使用我们的 FREB
模块。配置步骤如下面博客中所述:

http://thenextdoorgeek.com/post/Windows-Azure-Web-Sites-(WAWS)-Collecting-dumps-of-the-worker-process-(w3wpexe)-automatically-whenever-a-request-takes-a-long-time

此方法会带来 5-10%
的性能损失,并且需要启用 FREB。

注意:以上方法同样仅在标准模式下有效,因为在共享和免费模式下
1 小时后我们会自动禁用 FREB。

以下是支持的配置及其含义的列表。

本文翻译自:

http://blogs.msdn.com/b/windowsazure/archive/2014/02/06/auto-healing-windows-azure-web-sites.aspx

Windows Azure 网站自愈的更多相关文章

  1. 比较Windows Azure 网站(Web Sites), 云服务(Cloud Services)and 虚机(Virtual Machines)

    Windows Azure提供了几个部署web应用程序的方法,比如Windows Azure网站.云服务和虚拟机.你可能无法确定哪一个最适合您的需要,或者你可能清楚的概念,比如IaaS vs PaaS ...

  2. 在 Windows Azure 网站中进行纵向扩展和横向扩展

    编辑人员注释:本文章由 Windows Azure 网站团队的项目经理 Byron Tardif 撰写. 当您开始一个新的 Web 项目,或者刚刚开始开发一般的网站和应用程序时,您可能希望从小处着手. ...

  3. Windows Azure 网站:应用程序字符串和连接字符串的工作原理

    编辑人员注释:本文章由 Windows Azure 网站团队的首席项目经理 Stefan Schackow 撰写. Windows Azure 网站上有一个方便的功能,即开发人员可将 Azure 中的 ...

  4. 探索 Windows Azure 网站中的自动伸缩功能

     去年10月,我们发布了若干针对 WindowsAzure平台的更新,其中一项更新是添加了基于日期的自动伸缩调度支持(在不同的日期设置不同的规则). 在这篇博客文章中,我们将了解自动伸缩的概念,并 ...

  5. 在 Windows Azure 网站中配置动态 IP 地址限制

    我们最近对 Windows Azure 网站进行了升级,并启用了IIS8的动态 IP 限制模块.现在,开发人员可以为其网站启用并配置动态 IP 限制功能(或简称 DIPR). 可以通过以下链接查看此 ...

  6. Windows Azure 网站 (WAWS) 中的服务器端包含 (SSI)

     编辑人员注释:本文章由 Windows Azure 网站团队的项目经理Erez Benari 撰写. Windows Azure 网站客户普遍关心的一个问题是关于我们对服务器端包含(Server ...

  7. 您应该了解的 Windows Azure 网站在线工具

     编辑人员注释:本文章由Windows Azure 网站团队的软件开发者 Amit Apple 撰写. 如果想要了解并亲身参与计算资源管理,那么您一定会很高兴得知这一消息:Windows Azur ...

  8. 使用 IIS Manager 对 Windows Azure 网站进行远程管理

     最近,我们为客户新增了使用 Windows自带的 IIS管理控制台管理 Azure网站的功能.IIS Manager支持 HTTP over SSL,提供到您的 Windows Azure 网站 ...

  9. 最佳实践:Windows Azure 网站 (WAWS)

     编辑人员注释:本文章由 Windows Azure 网站团队的项目经理Sunitha Muthukrishna 撰写. Windows Azure 网站 (WAWS) 允许您在 Windows ...

随机推荐

  1. Java随机数生成原理--转稿

    1.Math库里的static(静态)方法random() 该方法的作用是产生0到1之间(包括0,但不包括1)的一个double值. double rand = Math.random(); 2.通过 ...

  2. mysql 调用存储过程及例子

    存储过程如同一门程序设计语言,同样包含了数据类型.流程控制.输入和输出和它自己的函数库. --------------------基本语法-------------------- 一.创建存储过程 c ...

  3. Qt QToolTip 控件背景的 QSS 设置方法(摘抄)

    Qt/C++/CSS: QTooltip stylesheet background colour Hi there, I've recently come across a problem deve ...

  4. MQ学习(二)----ActiveMQ简介(转)

    1.  什么是ActiveMQ ActiveMQ是一种开源的,实现了JMS1.1规范的,面向消息(MOM)的中间件,为应用程序提供高效的.可扩展的.稳定的和安全的企业级消息通信.ActiveMQ使用A ...

  5. Java学习之字符串的创建

    转自:http://lavasoft.blog.51cto.com/62575/80034/ Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时 ...

  6. 让IE6也能智能控制图片最大宽、高度

    当一个图片的宽度或高度超出了容器时,我们一般会用max-width或max-height来设置其最大宽.高度,让图片不会超出容器,但是如果同时设置了最大高度和最大宽度时,有可能会造成图片最终显示会有些 ...

  7. SQL 简单练习

    USE study; SELECT * FROM EMP --查询雇员姓名的最后三个字母 ) FROM EMP ; --查询10部门雇员进入公司的星期数 --1 查询部门30中的所有员工 --2 列出 ...

  8. tee 解决readonly 文件无法修改

    tee 是什么: 老规矩,找男人问.

  9. python学习【一】基础入门

    Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC ...

  10. RTTI-CLASS

    package com.xt.test; interface Test1Interface { } interface Test2Interface { } class Test1 implement ...