Add OutgoingPacketsResentCount clientstack stat.

This allows one to monitor the total number of messages resent to clients over time.
A constantly increasing stat may indicate a general server network or overloading issue if a fairly high proportion of packets sent
A smaller constantly increasing stat may indicate a problem with a particular client-server connection, would need to check "show queues" in this case.
link-sitting
Justin Clark-Casey (justincc) 2013-10-31 23:45:52 +00:00
parent b7c57294cc
commit 3d5a7e9b19
2 changed files with 32 additions and 1 deletions

View File

@ -3801,7 +3801,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
m_udpClient.NeedAcks.Remove(oPacket.SequenceNumber);
// Count this as a resent packet since we are going to requeue all of the updates contained in it
Interlocked.Increment(ref m_udpClient.PacketsResent);
Interlocked.Increment(ref m_udpClient.PacketsResent);
// We're not going to worry about interlock yet since its not currently critical that this total count
// is 100% correct
m_udpServer.PacketsResentCount++;
foreach (EntityUpdate update in updates)
ResendPrimUpdate(update);

View File

@ -145,6 +145,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP
stat => stat.Value = m_udpServer.UdpSends,
StatVerbosity.Debug));
StatsManager.RegisterStat(
new Stat(
"OutgoingPacketsResentCount",
"Number of packets resent because a client did not acknowledge receipt",
"",
"",
"clientstack",
scene.Name,
StatType.Pull,
MeasuresOfInterest.AverageChangeOverTime,
stat => stat.Value = m_udpServer.PacketsResentCount,
StatVerbosity.Debug));
StatsManager.RegisterStat(
new Stat(
"AverageUDPProcessTime",
@ -294,6 +307,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP
public Socket Server { get { return null; } }
/// <summary>
/// Record how many packets have been resent
/// </summary>
internal int PacketsResentCount { get; set; }
/// <summary>
/// Record how many packets have been sent
/// </summary>
internal int PacketsSentCount { get; set; }
/// <summary>
/// Record how many inbound packets could not be recognized as LLUDP packets.
/// </summary>
@ -1221,6 +1244,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
// Stats tracking
Interlocked.Increment(ref udpClient.PacketsSent);
// We're not going to worry about interlock yet since its not currently critical that this total count
// is 100% correct
PacketsSentCount++;
// Put the UDP payload on the wire
AsyncBeginSend(buffer);