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

20
我有一个在Azure上的高负载部署:4个大实例每秒处理约300-600个请求。在正常情况下,“平均响应时间”为70到150毫秒,但有时可能会增长到200-300毫秒,但这完全没问题。
然而,每天一两次(不是在“高峰时间”),我在Web站点监视选项卡中看到这样的情况:

Azure Web Site Monitoring

因此,每分钟请求次数显着下降,平均响应时间增长到3分钟,一段时间后一切恢复正常。
在这种“停机”期间,仅有0.1%的请求被丢弃(带有超时的Http服务器错误),其他请求只需等待队列并在几分钟后正常处理。然而,并非所有客户都准备好等待 :-(
内存使用率始终低于30%,CPU使用率仅高达40-50%。
我已经检查过什么:
1.超时请求的跟踪:它们在随机位置超时。
2.Azure Storage和其他组件的限流:根本没有限流。
3.我还尝试通过CloudFlare路由所有流量:并看到了相同的问题。
这些问题的原因是什么?我接下来该检查什么?
提前感谢大家!
更新1:BenV建议尝试了一个好方法,但不幸的是它没有显示出任何东西 :-( 我配置了每500k个请求的进程回收,并添加了工作节点,因此CPU利用率整天低于40%,但仍然出现停机。

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


我曾经遇到一个非常小的应用程序类似的问题。我尝试了很多方法,最终的解决方案是在开始时清除处理程序并手动添加它们。也许这对你有所帮助。 - user2721793
2个回答

8
我遇到了完全相同的问题。 对我来说,在日志中看到了很多WinCache错误。
每当网站失败时,日志中都会有很多WinCache错误。 WinCache是IIS处理PHP以尝试加快处理速度的方式。 它是由Microsoft构建的附加组件,在IIS和所有Azure站点中默认启用。 WinCache会卡住,而不是进行回收并继续运行,它会消耗实例上的所有内存和文件句柄,从而将其锁定。
我在Azure门户中添加了新的应用设置,以扫描包含php.ini设置更改的文件夹。
d:\ home \ site \ inid:\ 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兆字节,并限制总缓存大小。这会迫使WinCache更频繁地清除旧数据并回收缓存。

wincache.ocenabled=0 

这是非常重要的一步。禁用WinCache操作代码缓存。这将阻止WinCache将实际的PHP脚本缓存在内存中。文件仍然会被从第一行开始缓存,但是PHP将按照正常流程解释,并且不会被缓存为大型二进制文件。

我曾经遇到过与您类似的问题,我的Azure网站每3天就会崩溃,并且日志与您的相同,但是现在已经连续运行了120天而没有任何问题。

祝好运!


非常感谢您提供如此详细的答案,我希望它能帮助到遇到类似问题的人。但是我完全忘记提到我使用的平台...我使用的是ASP.Net MVC和C#。已经更新了我的问题。谢谢! - Alexander Shvetsov

5

谢谢,BenV,但是应用洞察每5分钟只能收集30,000个指标,这会导致数据收集停止直到午夜(据我所知),因此在这种负载下无法使用该工具(我的请求每分钟> 30,000):-( - Alexander Shvetsov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接