Author: nextgens Date: 2006-07-13 08:26:47 +0000 (Thu, 13 Jul 2006) New Revision: 9589
Modified: trunk/freenet/src/freenet/node/MemoryChecker.java trunk/freenet/src/freenet/node/Node.java Log: Implements node.aggressiveGC, see http://archives.freenetproject.org/thread/20060713.062548.1e298987.en.html DO NOT USE UNLESS YOU KNOW WHAT YOU ARE DOING! It's not documented : if you want to know what the value is referring to, RTFS :) http://emu.freenetproject.org/cgi-bin/viewcvs.cgi/trunk/freenet/src/freenet/node/MemoryChecker.java?rev=8876&view=markup It disables periodicaly called finalizer... but not the "finalize on completion" of buckets Modified: trunk/freenet/src/freenet/node/MemoryChecker.java =================================================================== --- trunk/freenet/src/freenet/node/MemoryChecker.java 2006-07-13 00:23:28 UTC (rev 9588) +++ trunk/freenet/src/freenet/node/MemoryChecker.java 2006-07-13 08:26:47 UTC (rev 9589) @@ -7,16 +7,20 @@ public void run() { Runtime r = Runtime.getRuntime(); while(true) { + int sleeptime = Node.aggressiveGCModificator; + if(sleeptime <= 0) + sleeptime = 250; + for(int i=0;i<120;i++) { try { - Thread.sleep(250); + Thread.sleep(sleeptime); } catch (InterruptedException e) { // Ignore } Logger.minor(this, "Memory in use: "+(r.totalMemory()-r.freeMemory())); } try { - Thread.sleep(250); + Thread.sleep(sleeptime); } catch (InterruptedException e) { // Ignore } @@ -27,10 +31,12 @@ // memory usage *more predictable*. This will make // tracking down the sort of nasty unpredictable OOMs // we are getting much easier. - Logger.minor(this, "Memory in use before GC: "+(r.totalMemory()-r.freeMemory())); - System.gc(); - System.runFinalization(); - Logger.minor(this, "Memory in use after GC: "+(r.totalMemory()-r.freeMemory())); + if(Node.aggressiveGCModificator > 0){ + Logger.minor(this, "Memory in use before GC: "+(r.totalMemory()-r.freeMemory())); + System.gc(); + System.runFinalization(); + Logger.minor(this, "Memory in use after GC: "+(r.totalMemory()-r.freeMemory())); + } } } } \ No newline at end of file Modified: trunk/freenet/src/freenet/node/Node.java =================================================================== --- trunk/freenet/src/freenet/node/Node.java 2006-07-13 00:23:28 UTC (rev 9588) +++ trunk/freenet/src/freenet/node/Node.java 2006-07-13 08:26:47 UTC (rev 9589) @@ -416,6 +416,8 @@ /** Log config handler */ public static LoggingConfigHandler logConfigHandler; + static int aggressiveGCModificator = 250; + /** If true, local requests and inserts aren't cached. * This opens up a glaring vulnerability; connected nodes * can then probe the store, and if the node doesn't have the @@ -1067,16 +1069,30 @@ primaryIPUndetectedAlert = new IPUndetectedUserAlert(); + int sortOrder = 0; + // Setup node-specific configuration + SubConfig nodeConfig = new SubConfig("node", config); + + + nodeConfig.register("aggressiveGC", aggressiveGCModificator, sortOrder++, true, "AggressiveGC modificator", "Enables the user to tweak the time in between GC and forced finalization. SHOULD NOT BE CHANGED unless you know what you're doing! -1 means : disable forced call to System.gc() and System.runFinalization()", + new IntCallback() { + public int get() { + return aggressiveGCModificator; + } + public void set(int val) throws InvalidConfigValueException { + if(val == get()) return; + Logger.normal(this, "Changing aggressiveGCModificator to "+val); + aggressiveGCModificator = val; + } + }); + //Memory Checking thread + // TODO: proper config. callbacks : maybe we shoudln't start the thread at all if it's not worthy this.myMemoryChecker = new Thread(new MemoryChecker(), "Memory checker"); this.myMemoryChecker.setPriority(Thread.MAX_PRIORITY); this.myMemoryChecker.setDaemon(true); - - // Setup node-specific configuration - SubConfig nodeConfig = new SubConfig("node", config); // IP address override - int sortOrder = 0; nodeConfig.register("ipAddressOverride", "", sortOrder++, true, "IP address override", "IP address override (not usually needed)", new StringCallback() { public String get() {
