Add start GC memory and end GC memory to object stress test printouts.

This illustrates that references to Scene, SOG, etc. are not currently being released when a stress test ends (or at regression test end in general).
This means even the current stress tests take much more memory than they need, a problem that will have to be addressed.
iar_mods
Justin Clark-Casey (justincc) 2012-02-07 23:03:53 +00:00
parent 1f402fdf5e
commit c87751a822
4 changed files with 22 additions and 4 deletions

View File

@ -567,7 +567,8 @@ namespace OpenSim.Region.Framework.Scenes
// ~SceneObjectGroup() // ~SceneObjectGroup()
// { // {
// m_log.DebugFormat("[SCENE OBJECT GROUP]: Destructor called for {0}, local id {1}", Name, LocalId); // //m_log.DebugFormat("[SCENE OBJECT GROUP]: Destructor called for {0}, local id {1}", Name, LocalId);
// Console.WriteLine("Destructor called for {0}, local id {1}", Name, LocalId);
// } // }
#region Constructors #region Constructors

View File

@ -48,6 +48,11 @@ namespace OpenSim.Tests.Common.Mock
{ {
} }
~TestScene()
{
Console.WriteLine("TestScene destructor called for {0}", RegionInfo.RegionName);
}
/// <summary> /// <summary>
/// Temporarily override session authentication for tests (namely teleport). /// Temporarily override session authentication for tests (namely teleport).
/// </summary> /// </summary>

View File

@ -131,7 +131,7 @@ namespace OpenSim.Tests.Torture
TimeSpan elapsed = DateTime.Now - start; TimeSpan elapsed = DateTime.Now - start;
// long processMemoryAlloc = process.PrivateMemorySize64 - startProcessMemory; // long processMemoryAlloc = process.PrivateMemorySize64 - startProcessMemory;
long processGcAlloc = GC.GetTotalMemory(false) - startGcMemory; long endGcMemory = GC.GetTotalMemory(false);
for (int i = 1; i <= objectsToAdd; i++) for (int i = 1; i <= objectsToAdd; i++)
{ {
@ -141,9 +141,19 @@ namespace OpenSim.Tests.Torture
string.Format("Object {0} could not be retrieved", i)); string.Format("Object {0} could not be retrieved", i));
} }
// This does not work to fire the SceneObjectGroup destructors - something else is hanging on to them.
// scene.DeleteAllSceneObjects();
Console.WriteLine( Console.WriteLine(
"Took {0}ms, {1}MB to create {2} objects each containing {3} prim(s)", "Took {0}ms, {1}MB ({2} - {3}) to create {4} objects each containing {5} prim(s)",
Math.Round(elapsed.TotalMilliseconds), processGcAlloc / 1024 / 1024, objectsToAdd, primsInEachObject); Math.Round(elapsed.TotalMilliseconds),
(endGcMemory - startGcMemory) / 1024 / 1024,
endGcMemory / 1024 / 1024,
startGcMemory / 1024 / 1024,
objectsToAdd,
primsInEachObject);
scene = null;
} }
} }
} }

View File

@ -107,6 +107,8 @@ namespace OpenSim.Tests.Torture
m_expectedChatMessages = scriptsToCreate; m_expectedChatMessages = scriptsToCreate;
int startingObjectIdTail = 0x100; int startingObjectIdTail = 0x100;
GC.Collect();
for (int idTail = startingObjectIdTail;idTail < startingObjectIdTail + scriptsToCreate; idTail++) for (int idTail = startingObjectIdTail;idTail < startingObjectIdTail + scriptsToCreate; idTail++)
{ {
AddObjectAndScript(idTail, userId); AddObjectAndScript(idTail, userId);