From f37038013d5c22d09b390eea81f567e4a2012a24 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Wed, 15 Aug 2012 22:43:32 +0100 Subject: [PATCH] Don't enable the thread watchdog until all regions are ready. This is to avoid false positives when the machine is under heavy load whilst starting up. --- OpenSim/Framework/Monitoring/Watchdog.cs | 31 +++++++++++++++++++---- OpenSim/Region/Application/OpenSimBase.cs | 9 +++++-- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/OpenSim/Framework/Monitoring/Watchdog.cs b/OpenSim/Framework/Monitoring/Watchdog.cs index d4cf02fe41..02f11fa3f3 100644 --- a/OpenSim/Framework/Monitoring/Watchdog.cs +++ b/OpenSim/Framework/Monitoring/Watchdog.cs @@ -97,6 +97,32 @@ namespace OpenSim.Framework.Monitoring /// /summary> public static event Action OnWatchdogTimeout; + /// + /// Is this watchdog active? + /// + public static bool Enabled + { + get { return m_enabled; } + set + { +// m_log.DebugFormat("[MEMORY WATCHDOG]: Setting MemoryWatchdog.Enabled to {0}", value); + + if (value == m_enabled) + return; + + m_enabled = value; + + if (m_enabled) + { + // Set now so we don't get alerted on the first run + LastWatchdogThreadTick = Environment.TickCount & Int32.MaxValue; + } + + m_watchdogTimer.Enabled = m_enabled; + } + } + private static bool m_enabled; + private static readonly ILog m_log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); private static Dictionary m_threads; private static System.Timers.Timer m_watchdogTimer; @@ -115,11 +141,6 @@ namespace OpenSim.Framework.Monitoring m_watchdogTimer = new System.Timers.Timer(WATCHDOG_INTERVAL_MS); m_watchdogTimer.AutoReset = false; m_watchdogTimer.Elapsed += WatchdogTimerElapsed; - - // Set now so we don't get alerted on the first run - LastWatchdogThreadTick = Environment.TickCount & Int32.MaxValue; - - m_watchdogTimer.Start(); } /// diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs index 37cfe1d25f..f78439860a 100644 --- a/OpenSim/Region/Application/OpenSimBase.cs +++ b/OpenSim/Region/Application/OpenSimBase.cs @@ -305,8 +305,13 @@ namespace OpenSim m_httpServerPort = m_networkServersInfo.HttpListenerPort; SceneManager.OnRestartSim += handleRestartRegion; - // Only start the memory watchdog once all regions are ready - SceneManager.OnRegionsReadyStatusChange += sm => MemoryWatchdog.Enabled = sm.AllRegionsReady; + // Only enable the watchdogs when all regions are ready. Otherwise we get false positives when cpu is + // heavily used during initial startup. + // + // FIXME: It's also possible that region ready status should be flipped during an OAR load since this + // also makes heavy use of the CPU. + SceneManager.OnRegionsReadyStatusChange + += sm => { MemoryWatchdog.Enabled = sm.AllRegionsReady; Watchdog.Enabled = sm.AllRegionsReady; }; } ///