をパージDiagnosticMonitorConfiguration
しようとして、次のことを試しました。
- (唯一の)Webroleインスタンスの電源を入れ直しました
- IISアプリプールを再起動しました(RDP => IISマネージャー経由)
- Web ロールを再デプロイしました
- global.asax コードを変更 => 再デプロイ
DirectoryConfiguration
しかし、DiagnosticMonitorConfiguration のディレクトリ データ ソース内にメンバーの余分なコピーがまだ表示されます。これらの余分なコピーは、IIS スレッドがリタイアするたびに global.asaxApplication_Start()
が呼び出されたときに誤って追加されました (20 分のアイドル時間)。それらがどのように追加されたかを示すBUGGYコードをコピーして貼り付けました(最終的に、のような例外が発生しましたOverallQuotaInMB is 150MB but sum of requested sub-quotas is 850MB
)。
質問: 重複している理由がわかりました。ただし、上記の箇条書きのアクションを試しても、DiagnosticMonitorConfiguration がパージされないのはなぜですか? 正確にどのように状態が永続化されていますか? Azure テーブルまたは Azure SQL でなければならないとしか思えませんが、それは単なる推測です。
// called from global.asax's Application_Start()
public bool Initialize()
{
RoleInstanceDiagnosticManager roleInstanceDiagnosticManager = getRoleInstanceDiagnosticManager();
config = roleInstanceDiagnosticManager.GetCurrentConfiguration();
if (config == null)
config = DiagnosticMonitor.GetDefaultInitialConfiguration();
LocalResource localResource = RoleEnvironment.GetLocalResource("MyAppLogFolder");
DirectoryConfiguration dirConfig = new DirectoryConfiguration();
dirConfig.Container = "myapplog-blob";
dirConfig.DirectoryQuotaInMB = localResource.MaximumSizeInMegabytes;
dirConfig.Path = localResource.RootPath;
// This is a BUG, keeps adding duplicate entries
config.Directories.DataSources.Add(dirConfig);
limitOtherDefaultDirSizes(config); // limits overall quota to 150MB
config.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(10.0);
roleInstanceDiagnosticManager.SetCurrentConfiguration(config);
return true;
}
リモート デバッグは、DiagnosticMonitorConfiguration データ構造が次のようになっていることを示しています。ここで重複がはっきりとわかり、例外が保証されます。
- config {Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorConfiguration}
- Directories {Microsoft.WindowsAzure.Diagnostics.DirectoriesBufferConfiguration}
- DataSources Count = 85 System.Collections.Generic.IList<Microsoft.WindowsAzure.Diagnostics.DirectoryConfiguration>
+ [0] {Microsoft.WindowsAzure.Diagnostics.DirectoryConfiguration}
+ [1] {Microsoft.WindowsAzure.Diagnostics.DirectoryConfiguration}
+ [2] {Microsoft.WindowsAzure.Diagnostics.DirectoryConfiguration}
- [3] {Microsoft.WindowsAzure.Diagnostics.DirectoryConfiguration}
Container "myapplog-blob" string
DirectoryQuotaInMB 10 int
Path "C:\\Resources\\directory\\73c8a6bf9a5e434ab3d0c44034e7b7e9.MyAPP.API.MyAppLogFolder\\" string
- [4] {Microsoft.WindowsAzure.Diagnostics.DirectoryConfiguration}
Container "myapplog-blob" string
DirectoryQuotaInMB 10 int
Path "C:\\Resources\\directory\\73c8a6bf9a5e434ab3d0c44034e7b7e9.MyAPP.API.MyAppLogFolder\\" string
+ [5] {Microsoft.WindowsAzure.Diagnostics.DirectoryConfiguration}
...
+ [84] {Microsoft.WindowsAzure.Diagnostics.DirectoryConfiguration}