Restore overload mode accidentally disabled in a prior commit. Add a new

config option, LogOverloads, to log when a thread pool overload occurs.
This option defaults to "True" because the logging data is useful for
diagnosing threading issues.
0.8.0.3
Melanie 2014-04-25 21:34:29 +01:00
parent 2572ed9ed9
commit a108fcac95
3 changed files with 18 additions and 2 deletions

View File

@ -127,12 +127,14 @@ namespace OpenSim.Framework
/// 3 = full stack trace, including common threads /// 3 = full stack trace, including common threads
/// </summary> /// </summary>
public static int LogThreadPool { get; set; } public static int LogThreadPool { get; set; }
public static bool LogOverloads { get; set; }
public static readonly int MAX_THREADPOOL_LEVEL = 3; public static readonly int MAX_THREADPOOL_LEVEL = 3;
static Util() static Util()
{ {
LogThreadPool = 0; LogThreadPool = 0;
LogOverloads = true;
} }
private static uint nextXferID = 5000; private static uint nextXferID = 5000;
@ -2172,7 +2174,7 @@ namespace OpenSim.Framework
{ {
long numRunning = numRunningThreadFuncs; long numRunning = numRunningThreadFuncs;
if (m_ThreadPool != null) if (m_ThreadPool != null && LogOverloads)
{ {
if ((threadFuncOverloadMode == 0) && (numRunning >= m_ThreadPool.MaxThreads)) if ((threadFuncOverloadMode == 0) && (numRunning >= m_ThreadPool.MaxThreads))
{ {
@ -2193,7 +2195,7 @@ namespace OpenSim.Framework
threadInfo.StackTrace = full; threadInfo.StackTrace = full;
threadInfo.LogThread = ShouldLogThread(partial); threadInfo.LogThread = ShouldLogThread(partial);
if (loggingEnabled && threadInfo.LogThread) if (threadInfo.LogThread)
{ {
m_log.DebugFormat("Queue threadfunc {0} (Queued {1}, Running {2}) {3}{4}", m_log.DebugFormat("Queue threadfunc {0} (Queued {1}, Running {2}) {3}{4}",
threadFuncNum, numQueued, numRunningThreadFuncs, threadFuncNum, numQueued, numRunningThreadFuncs,

View File

@ -154,6 +154,12 @@ namespace OpenSim
proxyUrl = networkConfig.GetString("proxy_url", ""); proxyUrl = networkConfig.GetString("proxy_url", "");
proxyOffset = Int32.Parse(networkConfig.GetString("proxy_offset", "0")); proxyOffset = Int32.Parse(networkConfig.GetString("proxy_offset", "0"));
} }
IConfig startupConfig = Config.Configs["Startup"];
if (startupConfig != null)
{
Util.LogOverloads = startupConfig.GetBoolean("LogOverloads", true);
}
} }
protected virtual void LoadPlugins() protected virtual void LoadPlugins()

View File

@ -292,6 +292,14 @@
; False items will be removed from the scene permanently ; False items will be removed from the scene permanently
UseTrashOnDelete = True UseTrashOnDelete = True
; #
; # Logging
; #
; Force logging when the thread pool approaches an overload condition
; Provides useful data for post-mortem analysis even in a production
; system with reduced logging
LogOverloads = True
[Map] [Map]
;WorldMapModule = "WorldMap" ;WorldMapModule = "WorldMap"