2

負荷分散されたサーバー セットアップでは、UmbracoLog テーブルは 1 秒あたり 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.9 GB のテーブルと、CPU とメモリの使用量に関して持続的に稼働しているデータベースが発生します。

他の同様のサイト設定の web.config および umbraco.config 設定ファイルを確認しましたが、構成に関して違いはありません。

システム レベルのロギングを無効にすることはできますが、他の意味のあるメッセージが失われます。

この問題を特定するのに役立つ人はいますか?

TL;DR Umbraco、ミリ秒ごとに複数の呼び出しでログ テーブルが叩かれています。

4

2 に答える 2

1

2 つの選択肢があり、両方を選択することをお勧めします。

イシュー トラッカー (issues.umbraco.org) で問題を報告してください。そうすれば、それが通常とは異なるものであるかどうかを調べることができます。

次に、それを停止するには、ログ メッセージをコメント アウトしてカスタム ビルドを実行できます。問題のあるコードについては、次のファイルを参照してください: https://bitbucket.org/slace/umbraco/src/e9e2f67c6cae/umbraco/presentation/umbraco/cache/dispatcher.cs

理想的ではありませんが、問題が修正されるまで、DB サーバーの負荷を軽減して稼働させることができます。

より大きな問題は、なぜそのコードが頻繁に実行されるのかということです。コードを調べて、理由がわかるかどうかを確認する価値があるかもしれません。見つけた場合は、Umbraco 本社に報告して、他の人のために修正できるようにしてください ;)

于 2013-02-06T21:49:39.053 に答える
1

問題を特定しました。期限切れのドキュメントと、umbraco 4.5.2 がそれらを処理する方法に行き着きました。

dll を逆アセンブルした後、publishService クラス (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 に答える