Author: rfm
Date: Sun Jul  5 09:37:18 2015
New Revision: 38749

URL: http://svn.gna.org/viewcvs/gnustep?rev=38749&view=rev
Log:
tweak initial memory warning threshold

Modified:
    libs/ec/trunk/EcProcess.h
    libs/ec/trunk/EcProcess.m

Modified: libs/ec/trunk/EcProcess.h
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/ec/trunk/EcProcess.h?rev=38749&r1=38748&r2=38749&view=diff
==============================================================================
--- libs/ec/trunk/EcProcess.h   (original)
+++ libs/ec/trunk/EcProcess.h   Sun Jul  5 09:37:18 2015
@@ -96,8 +96,10 @@
            <desc>
               This may be used to specify the total process memory usage
               (in megabytes) before memory usage alerting may begin.<br />
-              If this is not specified (or a negative value is specified)
-              the default of 500 megabytes is used.
+              If this is not specified (or a negative or excessive value
+              is specified) then memory is monitored for ten minutes and
+              the threshold is set at the peak during that period plus a
+              small margin to allow further memory growth before warning.
            </desc>
            <term>EcMemoryIncrement</term>
            <desc>

Modified: libs/ec/trunk/EcProcess.m
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/ec/trunk/EcProcess.m?rev=38749&r1=38748&r2=38749&view=diff
==============================================================================
--- libs/ec/trunk/EcProcess.m   (original)
+++ libs/ec/trunk/EcProcess.m   Sun Jul  5 09:37:18 2015
@@ -517,9 +517,8 @@
   return [name autorelease];
 }
 
-#define        DEFMEMALLOWED   500
 static NSUInteger       memMaximum = 0;
-static NSUInteger      memAllowed = DEFMEMALLOWED;      // In KB
+static NSUInteger      memAllowed = 0;
 static NSUInteger      memAvge = 0;
 static NSUInteger      memLast = 0;
 static NSUInteger      memPeak = 0;
@@ -1259,9 +1258,9 @@
 #endif
 
   memAllowed = (NSUInteger)[cmdDefs integerForKey: @"MemoryAllowed"];
-  if (0 == memAllowed || memAllowed > 200000)
-    {
-      memAllowed = DEFMEMALLOWED;
+  if (memAllowed > 200000)
+    {
+      memAllowed = 0;
     }
 
   memMaximum = (NSUInteger)[cmdDefs integerForKey: @"MemoryMaximum"];
@@ -2310,26 +2309,19 @@
         }
       memAvge = memLast;
     }
-  else
-    {
-      if (memSlot >= MEMCOUNT)
-        {
-          /* Next slot to record in will be zero.
-           */
-          memSlot = 0;
-        }
-      memRoll[memSlot++] = memLast;
-
-      /* Find the average usage over the last set of samples.
-       * Round up to a block size.
-       */
-      memAvge = 0;
-      for (i = 0; i < MEMCOUNT; i++)
-        {
-          memAvge += memRoll[i];
-        }
-      memAvge /= MEMCOUNT;
-    }
+  memRoll[memSlot % MEMCOUNT] = memLast;
+  memSlot++;
+
+  /* Find the average usage over the last set of samples.
+   * Round up to a block size.
+   */
+  memAvge = 0;
+  for (i = 0; i < MEMCOUNT; i++)
+    {
+      memAvge += memRoll[i];
+    }
+  memAvge /= MEMCOUNT;
+
   /* Convert to 1KB blocks.
    */
   memAvge = ((memAvge / 1024) + 1) * 1024;
@@ -2350,10 +2342,33 @@
         }
     }
 
-  if (memWarn < (memAllowed * 1024 * 1024))
-    {
-      memWarn = (memAllowed * 1024 * 1024);
-    }
+  if (memSlot < MEMCOUNT)
+    {
+      /* During the first ten minutes, we either use a configured
+       * limit for warning, or we build one abive the paek memory
+       * which will be used after the inital ten minutes.
+       */
+      if (memAllowed > 0)
+        {
+          memWarn = (memAllowed * 1024 * 1024);
+        }
+      else
+        {
+          /* Use the peak memory, plus half the difference between
+           * average and peak in order to provide some room for
+           * growth before warning.
+           */
+          memWarn = memPeak + (memPeak - memAvge) / 2;
+          if (memWarn < memPeak + 16 * 1024)
+            {
+              /* If the room for growth was very small, increase
+               * to at least 16KB.
+               */
+              memWarn = memPeak + 16 * 1024;
+            }
+        }
+    }
+
   if (memAvge > memWarn)
     {
       NSInteger     inc;


_______________________________________________
Gnustep-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs

Reply via email to