我在Azure上有一个高负载的部署:4个大型实例,每秒可处理300-600个请求。在正常情况下:“平均响应时间”为70到150ms,但有时可能会增长到200-300ms,但这绝对可以。

但是,每天一次或两次(不在“高峰时间”),我在“网站监视”选项卡上看到以下图片:

c# - 此类Azure网站挂起的原因可能是什么?-LMLPHP

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

在此“中断”期间,只有0.1%的请求被丢弃(带有超时的Http服务器错误),其他请求仅在队列中等待,通常在几分钟后得到处理。虽然,并非所有客户都准备好等待:-(

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

我已经检查了什么?:

  • 跟踪超时请求:它们确实在随机位置超时。
  • 用于Azure存储和其他组件的限制:完全没有限制。
  • 我也尝试通过CloudFlare路由所有流量:并看到了相同的问题。

  • 出现此类问题的原因可能是什么?接下来我要检查什么?
    谢谢大家!

    更新1 :BenV建议尝试尝试的好东西,但是很遗憾,它什么都没显示:-(
    我配置了每500k请求回收一次的进程,并添加了工作节点,因此CPU利用率现在整天不足40%,但是仍然会出现中断。

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

    最佳答案

    我有这个完全相同的问题。对我来说,我在日志中看到很多WinCache错误。

    每当站点失败时,日志中就会出现很多WinCache错误。 IIS通过WinCache来处理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
    

    将 session 处理程序从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崩溃到现在为止连续120天没有任何问题。

    祝你好运!

    09-27 04:26