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