public HttpResponseMessage LowMemoryNotification() { if (EnsureSystemDatabase() == false) { return(GetMessageWithString("Low memory simulation is only possible from the system database", HttpStatusCode.BadRequest)); } MemoryStatistics.SimulateLowMemoryNotification(); return(GetEmptyMessage()); }
public void get_debug_info_ForSpecifiedDatabaseReducedBatchSizeAutoTuner() { using (var documentStore = NewDocumentStore()) { documentStore.DatabaseCommands.GlobalAdmin.CreateDatabase(new DatabaseDocument { Id = "Dba1", Settings = { { "Raven/DataDir", "Dba1" } } }); var dbWorkContext = documentStore.ServerIfEmbedded.Options.DatabaseLandlord.GetResourceInternal("Dba1").Result.WorkContext; var dbName = dbWorkContext.DatabaseName; var reduceBatchSizeAutoTuner = new ReduceBatchSizeAutoTuner(dbWorkContext); var prefetchingBehavior = new PrefetchingBehavior(PrefetchingUser.Indexer, dbWorkContext, reduceBatchSizeAutoTuner, string.Empty); MemoryStatistics.SimulateLowMemoryNotification(); reduceBatchSizeAutoTuner.AutoThrottleBatchSize(100, 1024, TimeSpan.MinValue); reduceBatchSizeAutoTuner.HandleLowMemory(); prefetchingBehavior.HandleLowMemory(); MemoryStatistics.RunLowMemoryHandlers("System detected low memory"); prefetchingBehavior.OutOfMemoryExceptionHappened(); prefetchingBehavior.HandleLowMemory(); var url = $"http://localhost:8079/databases/{dbName}/debug/auto-tuning-info"; var requestWithDbName = documentStore.JsonRequestFactory.CreateHttpJsonRequest(new CreateHttpJsonRequestParams(null, url, HttpMethods.Get, documentStore.DatabaseCommands.PrimaryCredentials, documentStore.Conventions)); var results = requestWithDbName.ReadResponseJson().JsonDeserialization <AutoTunerInfo>(); var reason = results.Reason; var reasonForLowMemoryCall = results.LowMemoryCallsRecords.First().Reason; var lowMemoryRecords = results.LowMemoryCallsRecords.First().Operations; Assert.Equal("System detected low memory", reasonForLowMemoryCall); var urlAdmin = $"http://localhost:8079/databases/{dbName}/admin/debug/auto-tuning-info"; var requestWithDbNameAdmin = documentStore.JsonRequestFactory.CreateHttpJsonRequest(new CreateHttpJsonRequestParams(null, urlAdmin, HttpMethods.Get, documentStore.DatabaseCommands.PrimaryCredentials, documentStore.Conventions)); var resultsAdmin = requestWithDbNameAdmin.ReadResponseJson().JsonDeserialization <AutoTunerInfo>(); var reasonAdmin = results.Reason; var reasonForLowMemoryCallAdmin = resultsAdmin.LowMemoryCallsRecords.First().Reason; var lowMemoryRecordsAdmin = resultsAdmin.LowMemoryCallsRecords.First().Operations; var cpuUsageRecordsAdmin = resultsAdmin.CpuUsageCallsRecords; Assert.Equal("System detected low memory", reasonForLowMemoryCallAdmin); } }
private static void ReleaseMemoryBeforeGC() { if (MemoryStatistics.AvailableMemory < (MemoryStatistics.TotalPhysicalMemory - MemoryStatistics.AvailableMemory) / 10) { if (Environment.TickCount - lastTimeMemoryReleasedBeforeGC < fiveSecondsInTicks) { return; } lastTimeMemoryReleasedBeforeGC = Environment.TickCount; MemoryStatistics.SimulateLowMemoryNotification(); } else { MemoryStatistics.InitiateSoftMemoryRelease(); } }