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

Ale*_*sov 20 c# azure asp.net-mvc-4 azure-web-sites

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

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

Azure网站监控

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

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

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

我已经检查了什么?:

  1. 跟踪超时请求:他们确实在随机位置超时.
  2. Azure存储和其他使用的组件的限制:根本没有限制.
  3. 我还尝试通过CloudFlare路由所有流量:并看到了同样的问题.

这些问题可能是什么原因?我接下来可以检查什么?
谢谢大家!

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

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

gre*_*sel 8

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

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

我在Azure门户中添加了新的应用程序设置,以扫描文件夹中的php.ini设置更改.
d:\家\网站\ 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 
Run Code Online (Sandbox Code Playgroud)


这做了几件事:

wincache.fcenabled=1
Run Code Online (Sandbox Code Playgroud)

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

session.save_handler = files
Run Code Online (Sandbox Code Playgroud)

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

memory_limit = 256M
wincache.chkinterval=5
wincache.ucachesize=200
wincache.scachesize=64
wincache.enablecli=1
Run Code Online (Sandbox Code Playgroud)

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

wincache.ocenabled=0 
Run Code Online (Sandbox Code Playgroud)

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

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

祝好运!


Ben*_*enV 5

预览门户中有一些适用于Web Apps的好工具.

Azure Web Apps工具菜单

应用洞察扩展特别是可以为有效监测和故障排除应用程序性能.

在此输入图像描述