这种Azure网站挂起的原因是什么?

时间:2015-07-31 11:41:17

标签: c# asp.net-mvc-4 azure azure-web-sites

我在Azure上有一个相当高负载的部署:4个大型实例,每秒服务大约300-600个请求。在正常情况下:“平均响应时间”为70到150毫秒,但有时它可能长到200-300毫秒,但它绝对没问题。

虽然,每天一到两次(不是在“高峰时段”),我在网站监控标签上看到了这样的图片:

Azure Web Site Monitoring

因此,每分钟的请求数量显着下降,平均响应时间增加到3分钟,过了一会儿 - 一切都恢复正常。

在此“停电”期间,只有0.1%的请求被删除(带有超时的Http服务器错误),其他请求只是在队列中等待,并且通常在几分钟后处理。但是,并非所有客户都愿意等待: - (

内存使用率始终低于30%,CPU使用率仅高达40-50%。

我已经检查了什么?:

  1. 跟踪超时请求:他们确实在随机位置超时。
  2. 对Azure存储和其他使用的组件进行限制:完全没有限制。
  3. 我还试图通过CloudFlare路由所有流量:并看到了同样的问题。
  4. 出现此类问题的原因是什么?我接下来可以检查什么? 提前谢谢大家!

    更新1 :BenV提出了尝试的好事,但不幸的是它没有显示:-(
    我为每500k个请求配置了进程回收,并且还添加了工作节点,因此整天CPU利用率不到40%,但仍然会出现停电。

    更新2 :项目使用ASP.Net MVC 4。

2 个答案:

答案 0 :(得分:8)

我有同样的问题。对我来说,我在日志中看到了很多WinCache错误。

每当网站失败时,日志中会出现很多WinCache错误。 WinCache是​​IIS处理PHP以尝试加速处理的方式。它是Microsoft构建的附加组件,默认情况下在IIS和所有Azure站点中启用。 WinCache会被挂起而不是回收和继续,它会消耗一个实例上的所有内存和文件句柄,基本上将其锁定。

我在Azure门户中添加了新的应用程序设置,以扫描文件夹中的php.ini设置更改 d:\ home \ site \ ini

d:\ home \ site \ ini \ settings.ini 中添加了一个文件 包含以下内容

wincache.fcenabled=1
session.save_handler = files
memory_limit = 256M
wincache.chkinterval=5
wincache.ucachesize=200
wincache.scachesize=64
wincache.enablecli=1
wincache.ocenabled=0 

<小时/> 这做了几件事:

wincache.fcenabled=1

使用WinCache启用文件缓存(我认为这是默认设置)

session.save_handler = files

将会话处理程序从WinCache(Azure默认)更改为基于标准文件以减少缓存引擎压力

memory_limit = 256M
wincache.chkinterval=5
wincache.ucachesize=200
wincache.scachesize=64
wincache.enablecli=1

将WinCache大小设置为每个线程256 MB,并限制整体缓存大小。这会强制WinCache清除旧数据并更频繁地回收缓存。

wincache.ocenabled=0 

这是最重要的一个。禁用WinCache操作代码缓存。这就是WinCache将实际的PHP脚本缓存到内存中。文件仍然从第一行缓存,但PHP按正常方式解释,而不是缓存到大型二进制文件中。

我从一个我的Azure网站崩溃大约每3天一次,看起来像你的日志到目前为止连续120天没有任何问题。

祝你好运!

答案 1 :(得分:5)

preview portal中有一些适用于Web Apps的好工具。

Azure Web Apps tools menu

Application Insights扩展程序尤其适用于monitoring and troubleshooting app performance

enter image description here