From 6e2f3bd3fb88f41803376428bbffdd6aa67940c0 Mon Sep 17 00:00:00 2001 From: Justin Clarke Casey Date: Wed, 4 Jun 2008 16:30:44 +0000 Subject: [PATCH] * Start recording abnormal client thread terminations --- .../Statistics/SimExtraStatsCollector.cs | 22 ++++++++++++++++++- .../ClientStack/LindenUDP/LLClientView.cs | 4 ++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/OpenSim/Framework/Statistics/SimExtraStatsCollector.cs b/OpenSim/Framework/Statistics/SimExtraStatsCollector.cs index 2e7278b5c8..ca3fd4bd35 100644 --- a/OpenSim/Framework/Statistics/SimExtraStatsCollector.cs +++ b/OpenSim/Framework/Statistics/SimExtraStatsCollector.cs @@ -37,7 +37,9 @@ namespace OpenSim.Framework.Statistics /// Collects sim statistics which aren't already being collected for the linden viewer's statistics pane /// public class SimExtraStatsCollector : IStatsCollector - { + { + private long abnormalClientThreadTerminations; + private long assetsInCache; private long texturesInCache; private long assetCacheMemoryUsage; @@ -45,6 +47,11 @@ namespace OpenSim.Framework.Statistics private long blockedMissingTextureRequests; private long inventoryServiceRetrievalFailures; + + /// + /// Number of times that a client thread terminated because of an exception + /// + public long AbnormalClientThreadTerminations { get { return abnormalClientThreadTerminations; } } public long AssetsInCache { get { return assetsInCache; } } public long TexturesInCache { get { return texturesInCache; } } @@ -71,6 +78,11 @@ namespace OpenSim.Framework.Statistics /// private IDictionary packetQueueStatsCollectors = new Dictionary(); + + public void AddAbnormalClientThreadTermination() + { + abnormalClientThreadTerminations++; + } public void AddAsset(AssetBase asset) { @@ -147,6 +159,14 @@ namespace OpenSim.Framework.Statistics Blocked requests for missing textures: {2}" + Environment.NewLine, TexturesInCache, TextureCacheMemoryUsage / 1024.0, BlockedMissingTextureRequests)); + + sb.Append(Environment.NewLine); + sb.Append("CONNECTION STATISTICS"); + sb.Append(Environment.NewLine); + sb.Append( + string.Format( + "Abnormal client thread terminations: {0}" + Environment.NewLine, + abnormalClientThreadTerminations)); sb.Append(Environment.NewLine); sb.Append("INVENTORY STATISTICS"); diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index 230fe3cefd..af23660ff8 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -39,6 +39,7 @@ using libsecondlife.Packets; using log4net; using OpenSim.Framework; using OpenSim.Framework.Communications.Cache; +using OpenSim.Framework.Statistics; using OpenSim.Region.ClientStack.LindenUDP; using OpenSim.Region.Environment.Scenes; using Timer=System.Timers.Timer; @@ -729,6 +730,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (e is ThreadAbortException) throw e; + if (StatsManager.SimExtraStats != null) + StatsManager.SimExtraStats.AddAbnormalClientThreadTermination(); + // Don't let a failure in an individual client thread crash the whole sim. // FIXME: could do more sophisticated cleanup since leaving client resources around may // cause instability for the region server over time.