Author: danielr
Date: 2008-03-02 16:42:50 +0100 (Sun, 02 Mar 2008)
New Revision: 4522
Modified:
trunk/htroot/PerformanceMemory_p.java
trunk/htroot/Status.java
trunk/htroot/xml/status_p.java
trunk/source/dbtest.java
trunk/source/de/anomic/index/indexRAMRI.java
trunk/source/de/anomic/kelondro/kelondroEcoTable.java
trunk/source/de/anomic/plasma/plasmaRankingCRProcess.java
trunk/source/de/anomic/server/serverMemory.java
trunk/source/yacy.java
Log:
consistent use of de.anomic.server.serverMemory to get information about memory
statistics
Modified: trunk/htroot/PerformanceMemory_p.java
===================================================================
--- trunk/htroot/PerformanceMemory_p.java 2008-03-01 12:08:24 UTC (rev
4521)
+++ trunk/htroot/PerformanceMemory_p.java 2008-03-02 15:42:50 UTC (rev
4522)
@@ -87,15 +87,15 @@
}
}
- long memoryFreeNow = Runtime.getRuntime().freeMemory();
+ long memoryFreeNow = serverMemory.free();
long memoryFreeAfterInitBGC =
Long.parseLong(env.getConfig("memoryFreeAfterInitBGC", "0"));
long memoryFreeAfterInitAGC =
Long.parseLong(env.getConfig("memoryFreeAfterInitAGC", "0"));
long memoryFreeAfterStartup =
Long.parseLong(env.getConfig("memoryFreeAfterStartup", "0"));
- long memoryTotalNow = Runtime.getRuntime().totalMemory();
+ long memoryTotalNow = serverMemory.total();
long memoryTotalAfterInitBGC =
Long.parseLong(env.getConfig("memoryTotalAfterInitBGC", "0"));
long memoryTotalAfterInitAGC =
Long.parseLong(env.getConfig("memoryTotalAfterInitAGC", "0"));
long memoryTotalAfterStartup =
Long.parseLong(env.getConfig("memoryTotalAfterStartup", "0"));
- long memoryMax = Runtime.getRuntime().maxMemory();
+ long memoryMax = serverMemory.max();
prop.putNum("memoryMax", memoryMax / MB);
prop.putNum("memoryAvailAfterStartup", (memoryMax -
memoryTotalAfterStartup + memoryFreeAfterStartup) / MB);
Modified: trunk/htroot/Status.java
===================================================================
--- trunk/htroot/Status.java 2008-03-01 12:08:24 UTC (rev 4521)
+++ trunk/htroot/Status.java 2008-03-02 15:42:50 UTC (rev 4522)
@@ -288,12 +288,10 @@
prop.put("omode", "2");
}
- final Runtime rt = Runtime.getRuntime();
-
// memory usage and system attributes
- prop.put("freeMemory", serverMemory.bytesToString(rt.freeMemory()));
- prop.put("totalMemory", serverMemory.bytesToString(rt.totalMemory()));
- prop.put("maxMemory", serverMemory.bytesToString(rt.maxMemory()));
+ prop.put("freeMemory",
serverMemory.bytesToString(serverMemory.free()));
+ prop.put("totalMemory",
serverMemory.bytesToString(serverMemory.total()));
+ prop.put("maxMemory", serverMemory.bytesToString(serverMemory.max()));
prop.put("processors", serverProcessor.availableCPU);
// proxy traffic
Modified: trunk/htroot/xml/status_p.java
===================================================================
--- trunk/htroot/xml/status_p.java 2008-03-01 12:08:24 UTC (rev 4521)
+++ trunk/htroot/xml/status_p.java 2008-03-02 15:42:50 UTC (rev 4522)
@@ -43,6 +43,7 @@
import de.anomic.http.httpdByteCountInputStream;
import de.anomic.http.httpdByteCountOutputStream;
import de.anomic.plasma.plasmaSwitchboard;
+import de.anomic.server.serverMemory;
import de.anomic.server.serverObjects;
import de.anomic.server.serverProcessor;
import de.anomic.server.serverSwitch;
@@ -72,10 +73,9 @@
//
// memory usage and system attributes
- final Runtime rt = Runtime.getRuntime();
- prop.putNum("freeMemory", rt.freeMemory());
- prop.putNum("totalMemory", rt.totalMemory());
- prop.putNum("maxMemory", rt.maxMemory());
+ prop.putNum("freeMemory", serverMemory.free());
+ prop.putNum("totalMemory", serverMemory.total());
+ prop.putNum("maxMemory", serverMemory.max());
prop.putNum("processors", serverProcessor.availableCPU);
// proxy traffic
Modified: trunk/source/dbtest.java
===================================================================
--- trunk/source/dbtest.java 2008-03-01 12:08:24 UTC (rev 4521)
+++ trunk/source/dbtest.java 2008-03-02 15:42:50 UTC (rev 4522)
@@ -270,8 +270,7 @@
boolean assertionenabled = false;
assert assertionenabled = true;
if (assertionenabled) System.out.println("*** Asserts are enabled");
else System.out.println("*** HINT: YOU SHOULD ENABLE ASSERTS! (include -ea in
start arguments");
- Runtime runtime = Runtime.getRuntime();
- long mb = (runtime.maxMemory() - runtime.totalMemory() +
runtime.freeMemory()) / 1024 / 1024;
+ long mb = serverMemory.available() / 1024 / 1024;
System.out.println("*** RAM = " + mb + " MB");
System.out.print(">java " +
((assertionenabled) ? "-ea " : "") +
@@ -398,14 +397,14 @@
System.out.println("Loop " + loop + ": Write = " + write +
", Remove = " + remove);
System.out.println(" bevore GC: " +
- "free = " + Runtime.getRuntime().freeMemory() +
- ", max = " + Runtime.getRuntime().maxMemory() +
- ", total = " + Runtime.getRuntime().totalMemory());
+ "free = " + serverMemory.free() +
+ ", max = " + serverMemory.max() +
+ ", total = " + serverMemory.total());
System.gc();
System.out.println(" after GC: " +
- "free = " + Runtime.getRuntime().freeMemory() +
- ", max = " + Runtime.getRuntime().maxMemory() +
- ", total = " + Runtime.getRuntime().totalMemory());
+ "free = " + serverMemory.free() +
+ ", max = " + serverMemory.max() +
+ ", total = " + serverMemory.total());
loop++;
}
}
Modified: trunk/source/de/anomic/index/indexRAMRI.java
===================================================================
--- trunk/source/de/anomic/index/indexRAMRI.java 2008-03-01 12:08:24 UTC
(rev 4521)
+++ trunk/source/de/anomic/index/indexRAMRI.java 2008-03-02 15:42:50 UTC
(rev 4522)
@@ -169,7 +169,7 @@
+ " words done, "
+ (cache.size() / (wordsPerSecond + 1))
+ " seconds remaining, free mem = "
- + (Runtime.getRuntime().freeMemory() / 1024 / 1024)
+ + (serverMemory.free() / 1024 / 1024)
+ "MB");
messageTime = System.currentTimeMillis() + 5000;
}
@@ -209,7 +209,6 @@
//long creationTime;
indexRWIRowEntry wordEntry;
kelondroRow.EntryIndex row;
- //Runtime rt = Runtime.getRuntime();
while (i.hasNext()) {
// get out one entry
row = i.next();
@@ -221,12 +220,12 @@
addEntry(wordHash, wordEntry, startTime, false);
urlCount++;
// protect against memory shortage
- //while (rt.freeMemory() < 1000000) {flushFromMem();
java.lang.System.gc();}
+ //while (serverMemory.free() < 1000000) {flushFromMem();
java.lang.System.gc();}
// write a log
if (System.currentTimeMillis() > messageTime) {
serverMemory.gc(1000, "indexRAMRI, for better
statistic-2"); // for better statistic - thq
urlsPerSecond = 1 + urlCount * 1000 / (1 +
System.currentTimeMillis() - startTime);
- log.logInfo("restoring status: " + urlCount + " urls
done, " + ((dumpArray.size() - urlCount) / urlsPerSecond) + " seconds
remaining, free mem = " + (Runtime.getRuntime().freeMemory() / 1024 / 1024) +
"MB");
+ log.logInfo("restoring status: " + urlCount + " urls
done, " + ((dumpArray.size() - urlCount) / urlsPerSecond) + " seconds
remaining, free mem = " + (serverMemory.free() / 1024 / 1024) + "MB");
messageTime = System.currentTimeMillis() + 5000;
}
}
@@ -363,7 +362,7 @@
return hash;
}
// cases with respect to memory situation
- if (Runtime.getRuntime().freeMemory() < 100000) {
+ if (serverMemory.free() < 100000) {
// urgent low-memory case
hash = (String) hashScore.getMaxObject(); // flush
high-score entries (saves RAM)
} else {
Modified: trunk/source/de/anomic/kelondro/kelondroEcoTable.java
===================================================================
--- trunk/source/de/anomic/kelondro/kelondroEcoTable.java 2008-03-01
12:08:24 UTC (rev 4521)
+++ trunk/source/de/anomic/kelondro/kelondroEcoTable.java 2008-03-02
15:42:50 UTC (rev 4522)
@@ -100,7 +100,7 @@
long neededRAM4table = ((long) records) * (((long)
rowdef.objectsize) + 4L) * 3L;
table = ((neededRAM4table < maxarraylength) &&
((useTailCache == tailCacheForceUsage) ||
- ((useTailCache == tailCacheUsageAuto) &&
(Runtime.getRuntime().freeMemory() > neededRAM4table + 200 * 1024 * 1024)))) ?
+ ((useTailCache == tailCacheUsageAuto) &&
(serverMemory.free() > neededRAM4table + 200 * 1024 * 1024)))) ?
new kelondroRowSet(taildef, records) : null;
System.out.println("*** DEBUG " + tablefile + ": available RAM: "
+ (serverMemory.available() / 1024 / 1024) + "MB, allocating space for " +
records + " entries");
long neededRAM4index = 2 * 1024 * 1024 + records *
(rowdef.primaryKeyLength + 4) * 3 / 2;
Modified: trunk/source/de/anomic/plasma/plasmaRankingCRProcess.java
===================================================================
--- trunk/source/de/anomic/plasma/plasmaRankingCRProcess.java 2008-03-01
12:08:24 UTC (rev 4521)
+++ trunk/source/de/anomic/plasma/plasmaRankingCRProcess.java 2008-03-02
15:42:50 UTC (rev 4522)
@@ -428,7 +428,7 @@
count++;
if ((count % 1000) == 0) {
l = java.lang.Math.max(1, (System.currentTimeMillis() - start)
/ 1000);
- System.out.println("processed " + count + " citations, " +
(count / l) + " per second, rci.size = " + rci.size() + ", " + ((size - count)
/ (count / l) / 60) + " minutes remaining; mem = " +
Runtime.getRuntime().freeMemory());
+ System.out.println("processed " + count + " citations, " +
(count / l) + " per second, rci.size = " + rci.size() + ", " + ((size - count)
/ (count / l) / 60) + " minutes remaining; mem = " + serverMemory.free());
}
}
Modified: trunk/source/de/anomic/server/serverMemory.java
===================================================================
--- trunk/source/de/anomic/server/serverMemory.java 2008-03-01 12:08:24 UTC
(rev 4521)
+++ trunk/source/de/anomic/server/serverMemory.java 2008-03-02 15:42:50 UTC
(rev 4522)
@@ -28,6 +28,9 @@
import de.anomic.server.logging.serverLog;
import de.anomic.tools.yFormatter;
+/**
+ * Use this to get information about memory usage or try to free some memory
+ */
public class serverMemory {
private static final Runtime runtime = Runtime.getRuntime();
@@ -38,6 +41,11 @@
private static long lastGC;
+ /**
+ * Runs the garbage collector if last garbage collection is more than last
millis ago
+ * @param last time which must be passed since lased gc
+ * @param info additional info for log
+ */
public final synchronized static void gc(int last, String info) { // thq
long elapsed = System.currentTimeMillis() - lastGC;
if (elapsed > last) {
@@ -50,11 +58,15 @@
}
}
- /** @return the amount of freed bytes by a forced GC this method performes
*/
+ /**
+ * Tries to free count bytes
+ * @param count bytes
+ * @return the amount of freed bytes by a forced GC this method performes
+ */
private static long runGC(final boolean count) {
- final long memnow = runtime.maxMemory() - runtime.totalMemory() +
runtime.freeMemory();
+ final long memBefore = available();
gc(1000, "serverMemory.runGC(...)");
- final long freed = runtime.maxMemory() - runtime.totalMemory() +
runtime.freeMemory() - memnow;
+ final long freed = available() - memBefore;
if (count) {
gcs[gcs_pos] = freed;
gcs_pos = (gcs_pos + 1) % gcs.length;
@@ -78,29 +90,41 @@
return (y == 0) ? 0 : x / y;
}
- public static long free() {
- // memory that is free without increasing of total memory taken from os
+ /**
+ * memory that is free without increasing of total memory taken from os
+ * @return bytes
+ */
+ public static final long free() {
return runtime.freeMemory();
}
/**
- * Tries to free a specified amount of bytes. If the currently available
memory is enough, the
- * method returns <code>true</code> without performing additional steps.
Otherwise - if
- * <code>gciffail</code> is set - a Full GC is run, if
<code>gciffail</code> is set to
- * <code>false</code> and not enough memory is available, this method
returns <code>false</code>.
- *
- * @see serverMemory#request(long, boolean) for another implementation
- * @param memory amount of bytes to be assured to be free
- * @param gciffail if not enough memory is available, this parameter
specifies whether to perform
- * a Full GC to free enough RAM
- * @return whether enough RAM is available
+ * memory that is available including increasing total memory up to maximum
+ * @return bytes
*/
public static final long available() {
- // memory that is available including increasing total memory up to
maximum
- return runtime.maxMemory() - runtime.totalMemory() +
runtime.freeMemory();
+ return max() - total() + free();
}
/**
+ * maximum memory which the vm can use
+ * @return bytes
+ */
+ public static final long max()
+ {
+ return runtime.maxMemory();
+ }
+
+ /**
+ * currently allocated memory in the Java virtual machine; may vary
over time
+ * @return bytes
+ */
+ public static final long total()
+ {
+ return runtime.totalMemory();
+ }
+
+ /**
* <p>Tries to free a specified amount of bytes.</p>
* <p>
* If the currently available memory is enough, the method returns
<code>true</code> without
@@ -120,7 +144,7 @@
* @return whether enough memory could be freed (or is free) or not
*/
public static boolean request(final long size, final boolean force) {
- long avail = runtime.maxMemory() - runtime.totalMemory() +
runtime.freeMemory();
+ long avail = available();
if (avail >= size) return true;
if (log.isFine()) {
String t = new Throwable("Stack
trace").getStackTrace()[1].toString();
@@ -130,7 +154,7 @@
if (force || avg == 0 || avg + avail >= size) {
// this is only called if we expect that an allocation of <size>
bytes would cause the jvm to call the GC anyway
final long freed = runGC(!force);
- avail = runtime.maxMemory() - runtime.totalMemory() +
runtime.freeMemory();
+ avail = available();
log.logInfo("performed " + ((force) ? "explicit" : "necessary") +
" GC, freed " + (freed >> 10)
+ " KB (requested/available/average: "
+ (size >> 10) + " / " + (avail >> 10) + " / " + (avg >>
10) + " KB)");
@@ -142,11 +166,19 @@
}
}
+ /**
+ * memory that is currently bound in objects
+ * @return used bytes
+ */
public static long used() {
- // memory that is currently bound in objects
- return runtime.totalMemory() - runtime.freeMemory();
+ return total() - free();
}
+ /**
+ * Formats a number if it are bytes to greatest unit (1024 based)
+ * @param byteCount
+ * @return formatted String with unit
+ */
public static String bytesToString(long byteCount) {
try {
final StringBuffer byteString = new StringBuffer();
@@ -171,21 +203,24 @@
}
}
+ /**
+ * main
+ * @param args
+ */
public static void main(String[] args) {
// try this with a jvm 1.4.2 and with a jvm 1.5 and compare results
int mb = 1024 * 1024;
System.out.println("vm: " + System.getProperty("java.vm.version"));
- System.out.println("computed max = " +
(Runtime.getRuntime().maxMemory() / mb) + " mb");
+ System.out.println("computed max = " + (max() / mb) + " mb");
int alloc = 10000;
- Runtime rt = Runtime.getRuntime();
byte[][] x = new byte[100000][];
for (int i = 0; i < 100000; i++) {
x[i] = new byte[alloc];
if (i % 100 == 0) System.out.println("used = " + (i * alloc / mb) +
- ", total = " + (rt.totalMemory() / mb) +
- ", free = " + (rt.freeMemory() / mb) +
- ", max = " + (rt.maxMemory() / mb) +
- ", avail = " + ((rt.maxMemory() - rt.totalMemory() +
rt.freeMemory()) / mb));
+ ", total = " + (total() / mb) +
+ ", free = " + (free() / mb) +
+ ", max = " + (max() / mb) +
+ ", avail = " + (available() / mb));
}
}
Modified: trunk/source/yacy.java
===================================================================
--- trunk/source/yacy.java 2008-03-01 12:08:24 UTC (rev 4521)
+++ trunk/source/yacy.java 2008-03-02 15:42:50 UTC (rev 4522)
@@ -83,6 +83,7 @@
import de.anomic.server.serverCore;
import de.anomic.server.serverDate;
import de.anomic.server.serverFileUtils;
+import de.anomic.server.serverMemory;
import de.anomic.server.serverSemaphore;
import de.anomic.server.serverSystem;
import de.anomic.server.logging.serverLog;
@@ -392,11 +393,11 @@
// save information about available memory after all
initializations
//try {
- sb.setConfig("memoryFreeAfterInitBGC",
Runtime.getRuntime().freeMemory());
- sb.setConfig("memoryTotalAfterInitBGC",
Runtime.getRuntime().totalMemory());
+ sb.setConfig("memoryFreeAfterInitBGC",
serverMemory.free());
+ sb.setConfig("memoryTotalAfterInitBGC",
serverMemory.total());
System.gc();
- sb.setConfig("memoryFreeAfterInitAGC",
Runtime.getRuntime().freeMemory());
- sb.setConfig("memoryTotalAfterInitAGC",
Runtime.getRuntime().totalMemory());
+ sb.setConfig("memoryFreeAfterInitAGC",
serverMemory.free());
+ sb.setConfig("memoryTotalAfterInitAGC",
serverMemory.total());
//} catch (ConcurrentModificationException e) {}
// signal finished startup
@@ -605,8 +606,7 @@
// db used to hold all neede urls
plasmaCrawlLURL minimizedUrlDB = new plasmaCrawlLURL(indexRoot2);
- Runtime rt = Runtime.getRuntime();
- int cacheMem = (int)(rt.maxMemory() - rt.totalMemory());
+ int cacheMem = (int)(serverMemory.max() - serverMemory.total());
if (cacheMem < 2048000) throw new OutOfMemoryError("Not enough
memory available to start clean up.");
plasmaWordIndex wordIndex = new plasmaWordIndex(indexPrimaryRoot,
indexSecondaryRoot, log);
@@ -645,8 +645,8 @@
log.logInfo(wordCounter + " words scanned " +
"[" + wordChunkStartHash + " .. " +
wordChunkEndHash + "]\n" +
"Duration: "+ 500*1000/duration + " words/s" +
- " | Free memory: " + rt.freeMemory() +
- " | Total memory: " + rt.totalMemory());
+ " | Free memory: " + serverMemory.free() +
+ " | Total memory: " + serverMemory.total());
wordChunkStart = wordChunkEnd;
wordChunkStartHash = wordChunkEndHash;
}
@@ -901,8 +901,8 @@
// check memory amount
System.gc();
- long startupMemFree = Runtime.getRuntime().freeMemory(); // the
amount of free memory in the Java Virtual Machine
- long startupMemTotal = Runtime.getRuntime().totalMemory(); // the
total amount of memory in the Java virtual machine; may vary over time
+ long startupMemFree = serverMemory.free();
+ long startupMemTotal = serverMemory.total();
// go into headless awt mode
System.setProperty("java.awt.headless", "true");
_______________________________________________
YaCy-svn mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/yacy-svn