UMBRACO 7.6.0-网站每天几分钟无反应



几个月来我们一直在遇到问题,该站点每天在5-15分钟内完全不反应。我们已经添加了大量的请求记录,已启用的调试记录,并最终找到了一个模式:大约在停电前2分钟(在我看过的每个日志文件中,返回开始),以下几行出现:

2017-09-26 15:13:05,652 [p7940/d9/t76]调试 umbraco.web.publycache.xmlpublycache.xmlcachefilepersister- 计时器:发布。2017-09-26 15:13:05,652 [P7940/D9/T76] umbraco.web.publycache.xmlpublycache.xmlcachefilepersister- 立即运行(同步)。

我收集的是重建umbraco.config的过程,正确?

我们有约40,000个节点,所以我无法想象这是完成的最快过程,但是奇怪的是,在这些中断期间,Azure Web应用程序上的CPU和内存不会飙升。这似乎指出了磁盘I/O是瓶颈的事实。

这提出了一些问题:

  1. 是否可以通过仅运行的方式安排此任务在非高峰时间?
  2. 在较新版本(我们使用的7.6.0)中是否可以提高此功能?
  3. 还有其他建议可以帮助纠正此行为吗?

托管环境:

  • Azure App Service B2(基本)
  • SQL Azure Standard(20 dtus)-DTU使用率为20%,因此我认为那里没有任何东西。只是指出完整性
  • 用于媒体存储的Azure存储
  • 媒体请求的Azure CDN

非常感谢您。

更新10/4/2017

如果有帮助,看来这些特定的日志条目与当天的第一个发布相对应。

我觉得40,000个节点对Umbraco来说太多了,但是如果您想安排重新发布,可以做到这一点:

您可以使用以下方式编程地调用缓存刷新:

ApplicationContext.Current.Services.ContentService.RePublishAll();

(umbraco源)

您可以创建一个API控制器,您可以通过URL定期调用该控制器。控制器可能看起来像:

public class CacheController : UmbracoApiController
{
    [HttpGet]
    public HttpResponseMessage Republish(string pass)
    {
        if (pass != "passcode")
        {
            return Request.CreateResponse(HttpStatusCode.Unauthorized, new
            {
                success = false,
                message = "Access denied."
            });
        }
        var result = Services.ContentService.RePublishAll();
        if (result)
        {
            return Request.CreateResponse(HttpStatusCode.OK, new
            {
                success = true,
                message = "Republished"
            });
        }
        return Request.CreateResponse(HttpStatusCode.InternalServerError, new
        {
            success = false,
            message = "An error occurred"
        });
    }
}

您可以定期ping此URL:

/umbraco/api/cache/republish?code=passcode

我有一篇博客文章,介绍如何阅读如何安排这样的事件。我建议只使用Windows任务调度程序来ping url:https://harveywilliams.net/blog/better-task-scheduling-in-umbraco#windows-windows-task-scheduler

最新更新