more memory control:

- catchup of OutOfMemoryError in server threads
- automatic adoption of word cache size after a Short Mem Cycle

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@2426 6c8d7289-2bf4-0310-a012-ef5d649a1542
This commit is contained in:
orbiter 2006-08-19 00:06:39 +00:00
parent 3e9d509c39
commit 39b4c26bdc
3 changed files with 19 additions and 9 deletions

View File

@ -255,7 +255,7 @@ public class PerformanceQueues_p {
prop.put("maxAgeOfKCache", "" + (switchboard.wordIndex.maxAgeOfKCache() / 1000 / 60)); // minutes
prop.put("minAgeOfKCache", "" + (switchboard.wordIndex.minAgeOfKCache() / 1000 / 60)); // minutes
prop.put("maxWaitingWordFlush", switchboard.getConfig("maxWaitingWordFlush", "180"));
prop.put("wordCacheMaxCount", switchboard.getConfig("wordCacheMaxCount", "10000"));
prop.put("wordCacheMaxCount", switchboard.wordIndex.getMaxWordCount());
prop.put("onlineCautionDelay", switchboard.getConfig("onlineCautionDelay", "30000"));
prop.put("onlineCautionDelayCurrent", System.currentTimeMillis() - switchboard.proxyLastAccess);

View File

@ -944,7 +944,10 @@ public final class plasmaSwitchboard extends serverAbstractSwitch implements ser
public void deQueueFreeMem() {
// flush some entries from the RAM cache
wordIndex.flushCacheSome();
wordIndex.flushCacheSome();
// adopt maximum cache size to current size to prevent that further OutOfMemoryErrors occur
int newMaxCount = Math.max(2000, Math.min(wordIndex.getMaxWordCount(), wordIndex.wSize()));
setConfig("wordCacheMaxCount", Integer.toString(newMaxCount));
wordIndex.setMaxWordCount(newMaxCount);
}
public boolean deQueue() {

View File

@ -74,7 +74,7 @@ public final class serverInstantThread extends serverAbstractThread implements s
if (freemem == null)
this.freememExecMethod = null;
else
this.freememExecMethod = env.getClass().getMethod(jobCount, new Class[0]);
this.freememExecMethod = env.getClass().getMethod(freemem, new Class[0]);
} catch (NoSuchMethodException e) {
throw new RuntimeException("serverInstantThread, wrong declaration of freemem: " + e.getMessage());
@ -109,16 +109,20 @@ public final class serverInstantThread extends serverAbstractThread implements s
if (result == null) jobHasDoneSomething = true;
else if (result instanceof Boolean) jobHasDoneSomething = ((Boolean) result).booleanValue();
} catch (IllegalAccessException e) {
serverLog.logSevere("SERVER", "Internal Error in serverInstantThread: " + e.getMessage());
serverLog.logSevere("SERVER", "Internal Error in serverInstantThread.job: " + e.getMessage());
serverLog.logSevere("SERVER", "shutting down thread '" + this.getName() + "'");
this.terminate(false);
} catch (IllegalArgumentException e) {
serverLog.logSevere("SERVER", "Internal Error in serverInstantThread: " + e.getMessage());
serverLog.logSevere("SERVER", "Internal Error in serverInstantThread.job: " + e.getMessage());
serverLog.logSevere("SERVER", "shutting down thread '" + this.getName() + "'");
this.terminate(false);
} catch (InvocationTargetException e) {
serverLog.logSevere("SERVER", "Runtime Error in serverInstantThread, thread '" + this.getName() + "': " + e.getMessage() + "; target exception: " + e.getTargetException().getMessage(), e.getTargetException());
serverLog.logSevere("SERVER", "Runtime Error in serverInstantThread.job, thread '" + this.getName() + "': " + e.getMessage() + "; target exception: " + e.getTargetException().getMessage(), e.getTargetException());
e.getTargetException().printStackTrace();
} catch (OutOfMemoryError e) {
serverLog.logSevere("SERVER", "OutOfMemory Error in serverInstantThread.job, thread '" + this.getName() + "': " + e.getMessage());
e.printStackTrace();
freemem();
}
instantThreadCounter--;
return jobHasDoneSomething;
@ -129,16 +133,19 @@ public final class serverInstantThread extends serverAbstractThread implements s
try {
freememExecMethod.invoke(environment, new Object[0]);
} catch (IllegalAccessException e) {
serverLog.logSevere("SERVER", "Internal Error in serverInstantThread: " + e.getMessage());
serverLog.logSevere("SERVER", "Internal Error in serverInstantThread.freemem: " + e.getMessage());
serverLog.logSevere("SERVER", "shutting down thread '" + this.getName() + "'");
this.terminate(false);
} catch (IllegalArgumentException e) {
serverLog.logSevere("SERVER", "Internal Error in serverInstantThread: " + e.getMessage());
serverLog.logSevere("SERVER", "Internal Error in serverInstantThread.freemem: " + e.getMessage());
serverLog.logSevere("SERVER", "shutting down thread '" + this.getName() + "'");
this.terminate(false);
} catch (InvocationTargetException e) {
serverLog.logSevere("SERVER", "Runtime Error in serverInstantThread, thread '" + this.getName() + "': " + e.getMessage() + "; target exception: " + e.getTargetException().getMessage(), e.getTargetException());
serverLog.logSevere("SERVER", "Runtime Error in serverInstantThread.freemem, thread '" + this.getName() + "': " + e.getMessage() + "; target exception: " + e.getTargetException().getMessage(), e.getTargetException());
e.getTargetException().printStackTrace();
} catch (OutOfMemoryError e) {
serverLog.logSevere("SERVER", "OutOfMemory Error in serverInstantThread.freemem, thread '" + this.getName() + "': " + e.getMessage());
e.printStackTrace();
}
}