Example #1
0
        public HttpResponseMessage LowMemoryNotification()
        {
            if (EnsureSystemDatabase() == false)
            {
                return(GetMessageWithString("Low memory simulation is only possible from the system database", HttpStatusCode.BadRequest));
            }

            MemoryStatistics.SimulateLowMemoryNotification();

            return(GetEmptyMessage());
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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();
            }
        }