aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Framework')
-rw-r--r--OpenSim/Framework/Servers/BaseOpenSimServer.cs26
-rw-r--r--OpenSim/Framework/ThreadTracker.cs46
-rw-r--r--OpenSim/Framework/Watchdog.cs14
3 files changed, 22 insertions, 64 deletions
diff --git a/OpenSim/Framework/Servers/BaseOpenSimServer.cs b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
index f0f8d01..cbab2db 100644
--- a/OpenSim/Framework/Servers/BaseOpenSimServer.cs
+++ b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
@@ -37,6 +37,7 @@ using log4net;
37using log4net.Appender; 37using log4net.Appender;
38using log4net.Core; 38using log4net.Core;
39using log4net.Repository; 39using log4net.Repository;
40using OpenSim.Framework;
40using OpenSim.Framework.Console; 41using OpenSim.Framework.Console;
41using OpenSim.Framework.Servers; 42using OpenSim.Framework.Servers;
42using OpenSim.Framework.Servers.HttpServer; 43using OpenSim.Framework.Servers.HttpServer;
@@ -234,26 +235,19 @@ namespace OpenSim.Framework.Servers
234 protected string GetThreadsReport() 235 protected string GetThreadsReport()
235 { 236 {
236 StringBuilder sb = new StringBuilder(); 237 StringBuilder sb = new StringBuilder();
238 Watchdog.ThreadWatchdogInfo[] threads = Watchdog.GetThreads();
237 239
238 ProcessThreadCollection threads = ThreadTracker.GetThreads(); 240 sb.Append(threads.Length + " threads are being tracked:" + Environment.NewLine);
239 if (threads == null) 241 foreach (Watchdog.ThreadWatchdogInfo twi in threads)
240 { 242 {
241 sb.Append("OpenSim thread tracking is only enabled in DEBUG mode."); 243 Thread t = twi.Thread;
244
245 sb.Append(
246 "ID: " + t.ManagedThreadId + ", Name: " + t.Name + ", TimeRunning: "
247 + "Pri: " + t.Priority + ", State: " + t.ThreadState);
248 sb.Append(Environment.NewLine);
242 } 249 }
243 else
244 {
245 sb.Append(threads.Count + " threads are being tracked:" + Environment.NewLine);
246 foreach (ProcessThread t in threads)
247 {
248 sb.Append("ID: " + t.Id + ", TotalProcessorTime: " + t.TotalProcessorTime + ", TimeRunning: " +
249 (DateTime.Now - t.StartTime) + ", Pri: " + t.CurrentPriority + ", State: " + t.ThreadState);
250 if (t.ThreadState == System.Diagnostics.ThreadState.Wait)
251 sb.Append(", Reason: " + t.WaitReason + Environment.NewLine);
252 else
253 sb.Append(Environment.NewLine);
254 250
255 }
256 }
257 int workers = 0, ports = 0, maxWorkers = 0, maxPorts = 0; 251 int workers = 0, ports = 0, maxWorkers = 0, maxPorts = 0;
258 ThreadPool.GetAvailableThreads(out workers, out ports); 252 ThreadPool.GetAvailableThreads(out workers, out ports);
259 ThreadPool.GetMaxThreads(out maxWorkers, out maxPorts); 253 ThreadPool.GetMaxThreads(out maxWorkers, out maxPorts);
diff --git a/OpenSim/Framework/ThreadTracker.cs b/OpenSim/Framework/ThreadTracker.cs
deleted file mode 100644
index 069e98b..0000000
--- a/OpenSim/Framework/ThreadTracker.cs
+++ /dev/null
@@ -1,46 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Reflection;
31using System.Diagnostics;
32using log4net;
33
34namespace OpenSim.Framework
35{
36 public static class ThreadTracker
37 {
38// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
39
40 public static ProcessThreadCollection GetThreads()
41 {
42 Process thisProc = Process.GetCurrentProcess();
43 return thisProc.Threads;
44 }
45 }
46}
diff --git a/OpenSim/Framework/Watchdog.cs b/OpenSim/Framework/Watchdog.cs
index bc19dd1..9baf3a0 100644
--- a/OpenSim/Framework/Watchdog.cs
+++ b/OpenSim/Framework/Watchdog.cs
@@ -1,4 +1,4 @@
1/* 1/*
2 * Copyright (c) Contributors, http://opensimulator.org/ 2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
@@ -27,6 +27,7 @@
27 27
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using System.Linq;
30using System.Threading; 31using System.Threading;
31using log4net; 32using log4net;
32 33
@@ -43,7 +44,7 @@ namespace OpenSim.Framework
43 const int WATCHDOG_TIMEOUT_MS = 5000; 44 const int WATCHDOG_TIMEOUT_MS = 5000;
44 45
45 [System.Diagnostics.DebuggerDisplay("{Thread.Name}")] 46 [System.Diagnostics.DebuggerDisplay("{Thread.Name}")]
46 private class ThreadWatchdogInfo 47 public class ThreadWatchdogInfo
47 { 48 {
48 public Thread Thread; 49 public Thread Thread;
49 public int LastTick; 50 public int LastTick;
@@ -149,6 +150,15 @@ namespace OpenSim.Framework
149 } 150 }
150 catch { } 151 catch { }
151 } 152 }
153
154 /// <summary>
155 /// Get currently watched threads for diagnostic purposes
156 /// </summary>
157 /// <returns></returns>
158 public static ThreadWatchdogInfo[] GetThreads()
159 {
160 return m_threads.Values.ToArray();
161 }
152 162
153 private static void WatchdogTimerElapsed(object sender, System.Timers.ElapsedEventArgs e) 163 private static void WatchdogTimerElapsed(object sender, System.Timers.ElapsedEventArgs e)
154 { 164 {