diff --git a/source/de/anomic/server/serverBusyThread.java b/source/de/anomic/server/serverBusyThread.java index e11cef462..907708c82 100644 --- a/source/de/anomic/server/serverBusyThread.java +++ b/source/de/anomic/server/serverBusyThread.java @@ -26,46 +26,77 @@ package de.anomic.server; public interface serverBusyThread extends serverThread { + /** + * sets a sleep time before execution of the job-loop + * @param milliseconds + */ public void setStartupSleep(long milliseconds); - // sets a sleep time before execution of the job-loop + /** + * sets a sleep time for pauses between two jobs if the job returns false (idle) + * @param milliseconds + * @return + */ public long setIdleSleep(long milliseconds); - // sets a sleep time for pauses between two jobs if the job returns false (idle) + /** + * sets a sleep time for pauses between two jobs if the job returns true (busy) + * @param milliseconds + * @return + */ public long setBusySleep(long milliseconds); - // sets a sleep time for pauses between two jobs if the job returns true (busy) + /** + * sets minimum required amount of memory for the job execution + * @param freeBytes + */ public void setMemPreReqisite(long freeBytes); - // sets minimum required amount of memory for the job execution + /** + * defines if the thread should obey the intermission command + * @param obey + */ public void setObeyIntermission(boolean obey); - // defines if the thread should obey the intermission command + /** + * @return the total number of cycles of job execution with idle-result + */ public long getIdleCycles(); - // returns the total number of cycles of job execution with idle-result + /** + * @return the total number of cycles of job execution with busy-result + */ public long getBusyCycles(); - // returns the total number of cycles of job execution with busy-result + /** + * @return the total number of cycles where a job execution was omitted + * because of memory shortage + */ public long getOutOfMemoryCycles(); - // returns the total number of cycles where - // a job execution was omitted because of memory shortage + /** + * @return the total time that this thread has slept so far + */ public long getSleepTime(); - // returns the total time that this thread has slept so far + /** + * the thread is forced to pause for a specific time + * if the thread is busy meanwhile, the pause is ommitted + * @param pause + */ public void intermission(long pause); - // the thread is forced to pause for a specific time - // if the thread is busy meanwhile, the pause is ommitted + /** + * performes one job procedure; this loopes until terminate() is called + * @return true if it has done something, false if it is idle and does not expect to work on more for a longer time + */ public boolean job() throws Exception; - // performes one job procedure; this loopes until terminate() is called - // job returns true if it has done something - // it returns false if it is idle and does not expect to work on more for a longer time + /** + * is called when an outOfMemoryCycle is performed + * this method should try to free some memory, so that the job can be executed + */ public void freemem(); - // is called when an outOfMemoryCycle is performed - // this method should try to free some memory, so that the job can be executed public void notifyThread(); } diff --git a/source/de/anomic/server/serverCore.java b/source/de/anomic/server/serverCore.java index ef2c74d54..e900eaede 100644 --- a/source/de/anomic/server/serverCore.java +++ b/source/de/anomic/server/serverCore.java @@ -207,7 +207,7 @@ public final class serverCore extends serverAbstractBusyThread implements server this.sslSocketFactory = initSSLFactory(); // init session parameter - maxBusySessions = Integer.valueOf(switchboard.getConfig("httpdMaxBusySessions","100")).intValue(); + maxBusySessions = Math.max(1, Integer.valueOf(switchboard.getConfig("httpdMaxBusySessions","100")).intValue()); busySessions = new ConcurrentHashMap(); // init servercore @@ -323,7 +323,7 @@ public final class serverCore extends serverAbstractBusyThread implements server // idleThreadCheck(); this.switchboard.handleBusyState(this.busySessions.size()); if (log.isFinest()) this.log.logFinest("* waiting for connections, " + this.busySessions.size() + " sessions running"); - + announceThreadBlockApply(); // wait for new connection @@ -331,6 +331,14 @@ public final class serverCore extends serverAbstractBusyThread implements server announceThreadBlockRelease(); + if(this.busySessions.size() >= this.maxBusySessions) + { + // immediatly close connection if too much sessions are still running + if (log.isFinest()) this.log.logFinest("* connections exceeding limit, closing new incoming connection from "+ controlSocket.getRemoteSocketAddress()); + controlSocket.close(); + return false; + } + final String cIP = clientAddress(controlSocket); //System.out.println("server bfHosts=" + bfHost.toString()); if (bfHost.get(cIP) != null) { @@ -645,11 +653,28 @@ public final class serverCore extends serverAbstractBusyThread implements server } catch (final IOException e) { e.printStackTrace(); } - if (busySessions != null) busySessions.remove(this); + if (busySessions != null) + { + busySessions.remove(this); + if(log.isFinest()) log.logFinest("* removed session "+ this.controlSocket.getRemoteSocketAddress() + this.request); + } } } + /* + * (non-Javadoc) + * + * @see java.lang.Object#finalize() + */ + protected void finalize() { + if (busySessions != null && busySessions.contains(this)) + { + busySessions.remove(this); + if(log.isFinest()) log.logFinest("* removed session "+ this.controlSocket.getRemoteSocketAddress() + this.request); + } + } + private void listen() { try { diff --git a/source/de/anomic/tools/diskUsage.java b/source/de/anomic/tools/diskUsage.java index 646cf7a3a..7d9473fa3 100644 --- a/source/de/anomic/tools/diskUsage.java +++ b/source/de/anomic/tools/diskUsage.java @@ -260,7 +260,7 @@ public class diskUsage { } else if (dir != null) { checkVolumesInUseUnix (dir); } else { - log.logSevere("directory is null: " + dir); + log.logSevere("directory is null: " + element); } } else { try {