我在Azure上有一个相当高负载的部署:4个大型实例,每秒服务大约300-600个请求。在正常情况下:“平均响应时间”为70到150毫秒,但有时它可能长到200-300毫秒,但它绝对没问题。
虽然,每天一到两次(不是在“高峰时段”),我在网站监控标签上看到了这样的图片:
因此,每分钟的请求数量显着下降,平均响应时间增加到3分钟,过了一会儿 - 一切都恢复正常。
在此“停电”期间,只有0.1%的请求被删除(带有超时的Http服务器错误),其他请求只是在队列中等待,并且通常在几分钟后处理。但是,并非所有客户都愿意等待: - (
内存使用率始终低于30%,CPU使用率仅高达40-50%。
我已经检查了什么?:
出现此类问题的原因是什么?我接下来可以检查什么? 提前谢谢大家!
更新1 :BenV提出了尝试的好事,但不幸的是它没有显示:-(
我为每500k个请求配置了进程回收,并且还添加了工作节点,因此整天CPU利用率不到40%,但仍然会出现停电。
更新2 :项目使用ASP.Net MVC 4。
答案 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的好工具。
Application Insights扩展程序尤其适用于monitoring and troubleshooting app performance。