几个月来我们一直在遇到问题,该站点每天在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是瓶颈的事实。
这提出了一些问题:
- 是否可以通过仅运行的方式安排此任务在非高峰时间?
- 在较新版本(我们使用的7.6.0)中是否可以提高此功能?
- 还有其他建议可以帮助纠正此行为吗?
托管环境:
- 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