2

在负载平衡的服务器设置中,我们的 UmbracoLog 表每秒接收大约 50 条记录,这些记录都遵循相同的模式(格式化道歉)

**id    userId  NodeId  Datestamp   logHeader   logComment

1122069437  0   -1  41302.1891  System  Submitting calls to distributed servers

1122069438  0   -1  41302.1891  Custom  http://www.url.com/umbraco/webservices/cacheRefresher.asmx

1122069439  0   -1  41302.1891  System  Submitting calls to distributed servers

1122069440  0   -1  41302.1891  System  Distributed server push completed with no nodes reporting an error

1122069441  0   -1  41302.1891  System  Distributed server push completed with no nodes reporting an error

1122069442  0   -1  41302.1891  Custom  http://www.url.com/umbraco/webservices/cacheRefresher.asmx**

在 24 小时内,这会产生一个 6.9GB 的表和一个数据库,就 CPU 和内存使用而言,该数据库一直处于热运行状态。

我们检查了其他类似站点设置的 web.config 和 umbraco.config 设置文件,在配置方面没有差异。

我们可以禁用系统级别的日志记录,但我们会丢失其他有意义的消息。

任何人都可以帮助隔离这个问题吗?

TL;DR Umbraco,日志表每毫秒被多次调用敲击。

4

2 回答 2

1

我们已经确定了这个问题。它归结为过期文件以及 umbraco 4.5.2 如何处理它们。

拆解dll后,我们在publishingService类(umbraco.presentation)的CheckPublishing方法中找到了罪魁祸首:

foreach (Document d in Document.GetDocumentsForExpiration())
{
   library.UnPublishSingleNode(d.Id);
}

GetDocumentsForExpiration() 运行以下查询:

IRecordsReader dr = CMSNode.SqlHelper.ExecuteReader("select distinct nodeId from cmsDocument where newest = 1 and not expireDate is null and expireDate <= @today", new IParameter[] { CMSNode.SqlHelper.CreateParameter("@today", DateTime.Now) });

因此,umbraco 运行此发布服务来检查和取消发布过期文档,而无需实际更新过期日期,该日期用于获取需要过期/取消发布的文档。因此,这些文件永远不会过期(尽管它们尚未发布)。

每次文档发生更改(发布、取消发布、保存等)时,都会调用分布式服务器。由于 publishingService 和上面概述的代码,这些过期的文档在每次服务运行时都不会发布,从而导致许多分布式调用(以及正在写入的数据库记录)。

解决方案是清除这些文档上的到期日期(手动或通过 SQL 代理作业)或修复 Umbraco 源代码。

此错误已在 Umbraco 的更高版本中修复(不确定它是在哪个版本中修复的,但我检查了 4.11.3 并且它具有固定代码)。

于 2013-02-27T22:34:16.260 回答
1

我建议你有两个选择,你两个都选。

在问题跟踪器 (issues.umbraco.org) 上报告问题,以便这些人可以调查它是否有异常。

然后要停止它,您可以使用注释掉的日志消息进行自定义构建。有关违规代码,请参阅此文件:https ://bitbucket.org/slace/umbraco/src/e9e2f67c6cae/umbraco/presentation/umbraco/cache/dispatcher.cs

不理想,但可以让您启动并运行并减轻数据库服务器上的负载,直到您得到修复。

一个更大的问题是为什么代码会如此频繁地运行,可能值得在代码中挖掘一下,看看你是否能明白原因。如果您确实发现了,请向 Umbraco 总部报告,以便他们为其他人修复它;)

于 2013-02-06T21:49:39.053 回答