diff --git a/htroot/PerformanceMemory_p.html b/htroot/PerformanceMemory_p.html
index 5b98b0013..bc90a3412 100644
--- a/htroot/PerformanceMemory_p.html
+++ b/htroot/PerformanceMemory_p.html
@@ -191,20 +191,28 @@
Delete |
- DNSCache |
- |
+ DNSCache/Hit |
#[namecacheHit.size]# |
+ #[namecacheHit.Hit]# |
+ #[namecacheHit.Miss]# |
+ #[namecacheHit.Insert]# |
+ (ARC) |
+
+
+ DNSCache/Miss |
#[namecacheMiss.size]# |
- |
- |
+ #[namecacheMiss.Hit]# |
+ #[namecacheMiss.Miss]# |
+ #[namecacheMiss.Insert]# |
+ (ARC) |
DNSNoCache |
- |
#[namecache.noCache]# |
|
|
|
+ |
HashBlacklistedCache |
diff --git a/htroot/PerformanceMemory_p.java b/htroot/PerformanceMemory_p.java
index 31578f8fe..66b164e00 100644
--- a/htroot/PerformanceMemory_p.java
+++ b/htroot/PerformanceMemory_p.java
@@ -38,25 +38,24 @@ import net.yacy.kelondro.table.Table;
import net.yacy.kelondro.util.FileUtils;
import net.yacy.kelondro.util.Formatter;
import net.yacy.kelondro.util.MemoryControl;
-
import de.anomic.search.SearchEventCache;
import de.anomic.search.Switchboard;
import de.anomic.server.serverObjects;
import de.anomic.server.serverSwitch;
public class PerformanceMemory_p {
-
+
private static final long KB = 1024;
private static final long MB = 1024 * KB;
private static Map defaultSettings = null;
-
+
public static serverObjects respond(final RequestHeader header, final serverObjects post, final serverSwitch env) {
// return variable that accumulates replacements
final serverObjects prop = new serverObjects();
if (defaultSettings == null) {
defaultSettings = FileUtils.loadMap(new File(env.getAppPath(), "defaults/yacy.init"));
}
-
+
prop.put("gc", "0");
if (post != null) {
if (post.containsKey("gc")) {
@@ -64,7 +63,7 @@ public class PerformanceMemory_p {
prop.put("gc", "1");
}
}
-
+
final long memoryFreeNow = MemoryControl.free();
final long memoryFreeAfterInitBGC = env.getConfigLong("memoryFreeAfterInitBGC", 0L);
final long memoryFreeAfterInitAGC = env.getConfigLong("memoryFreeAfterInitAGC", 0L);
@@ -73,7 +72,7 @@ public class PerformanceMemory_p {
final long memoryTotalAfterInitBGC = env.getConfigLong("memoryTotalAfterInitBGC", 0L);
final long memoryTotalAfterInitAGC = env.getConfigLong("memoryTotalAfterInitAGC", 0L);
final long memoryTotalAfterStartup = env.getConfigLong("memoryTotalAfterStartup", 0L);
-
+
prop.putNum("memoryMax", MemoryControl.maxMemory / MB);
prop.putNum("memoryAvailAfterStartup", (MemoryControl.maxMemory - memoryTotalAfterStartup + memoryFreeAfterStartup) / MB);
prop.putNum("memoryAvailAfterInitBGC", (MemoryControl.maxMemory - memoryTotalAfterInitBGC + memoryFreeAfterInitBGC) / MB);
@@ -91,7 +90,7 @@ public class PerformanceMemory_p {
prop.putNum("memoryUsedAfterInitBGC", (memoryTotalAfterInitBGC - memoryFreeAfterInitBGC) / KB);
prop.putNum("memoryUsedAfterInitAGC", (memoryTotalAfterInitAGC - memoryFreeAfterInitAGC) / KB);
prop.putNum("memoryUsedNow", (memoryTotalNow - memoryFreeNow) / MB);
-
+
// write table for Table index sizes
Iterator i = Table.filenames();
String filename;
@@ -109,19 +108,19 @@ public class PerformanceMemory_p {
totalmem += mem;
prop.put("EcoList_" + c + "_tableKeyMem", Formatter.bytesToString(mem));
prop.put("EcoList_" + c + "_tableKeyChunkSize", map.get("tableKeyChunkSize"));
-
+
mem = Long.parseLong(map.get("tableValueMem"));
totalmem += mem;
prop.put("EcoList_" + c + "_tableValueMem", Formatter.bytesToString(mem));
prop.put("EcoList_" + c + "_tableValueChunkSize", map.get("tableValueChunkSize"));
-
+
c++;
}
prop.put("EcoList", c);
prop.putNum("EcoIndexTotalMem", totalmem / (1024 * 1024d));
-
+
// write object cache table
- Iterator> oi = RAMIndex.objects();
+ final Iterator> oi = RAMIndex.objects();
c = 0;
mem = 0;
Map.Entry oie;
@@ -130,25 +129,25 @@ public class PerformanceMemory_p {
while (oi.hasNext()) {
try {
oie = oi.next();
- } catch (ConcurrentModificationException e) {
+ } catch (final ConcurrentModificationException e) {
break;
}
filename = oie.getKey();
cache = oie.getValue();
prop.put("indexcache_" + c + "_Name", ((p = filename.indexOf("DATA")) < 0) ? filename : filename.substring(p));
-
+
hitmem = cache.mem();
totalhitmem += hitmem;
prop.put("indexcache_" + c + "_ChunkSize", cache.row().objectsize);
prop.putNum("indexcache_" + c + "_Count", cache.size());
prop.put("indexcache_" + c + "_NeededMem", cache.size() * cache.row().objectsize);
prop.put("indexcache_" + c + "_UsedMem", hitmem);
-
+
c++;
}
prop.put("indexcache", c);
prop.putNum("indexcacheTotalMem", totalhitmem / (1024 * 1024d));
-
+
// write object cache table
i = Cache.filenames();
c = 0;
@@ -158,7 +157,7 @@ public class PerformanceMemory_p {
filename = i.next();
map = Cache.memoryStats(filename);
prop.put("ObjectList_" + c + "_objectCachePath", ((p = filename.indexOf("DATA")) < 0) ? filename : filename.substring(p));
-
+
// hit cache
hitmem = Long.parseLong(map.get("objectHitMem"));
totalhitmem += hitmem;
@@ -171,7 +170,7 @@ public class PerformanceMemory_p {
prop.putNum("ObjectList_" + c + "_objectHitCacheWriteDouble", map.get("objectHitCacheWriteDouble"));
prop.putNum("ObjectList_" + c + "_objectHitCacheDeletes", map.get("objectHitCacheDeletes"));
prop.putNum("ObjectList_" + c + "_objectHitCacheFlushes", map.get("objectHitCacheFlushes"));
-
+
// miss cache
missmem = Long.parseLong(map.get("objectMissMem"));
totalmissmem += missmem;
@@ -184,7 +183,7 @@ public class PerformanceMemory_p {
prop.putNum("ObjectList_" + c + "_objectMissCacheWriteDouble", map.get("objectMissCacheWriteDouble"));
prop.putNum("ObjectList_" + c + "_objectMissCacheDeletes", map.get("objectMissCacheDeletes"));
//prop.put("ObjectList_" + c + "_objectMissCacheFlushes", map.get("objectMissCacheFlushes"));
-
+
c++;
}
prop.put("ObjectList", c);
@@ -192,11 +191,17 @@ public class PerformanceMemory_p {
prop.putNum("objectCacheStartShrink", Cache.getMemStartShrink() / (1024 * 1024d));
prop.putNum("objectHitCacheTotalMem", totalhitmem / (1024 * 1024d));
prop.putNum("objectMissCacheTotalMem", totalmissmem / (1024 * 1024d));
-
+
// other caching structures
prop.putNum("namecacheHit.size", Domains.nameCacheHitSize());
+ prop.putNum("namecacheHit.Hit", Domains.cacheHit_Hit);
+ prop.putNum("namecacheHit.Miss", Domains.cacheHit_Miss);
+ prop.putNum("namecacheHit.Insert", Domains.cacheHit_Insert);
prop.putNum("namecacheMiss.size", Domains.nameCacheMissSize());
- prop.putNum("namecache.noCache", 0);
+ prop.putNum("namecacheMiss.Hit", Domains.cacheMiss_Hit);
+ prop.putNum("namecacheMiss.Miss", Domains.cacheMiss_Miss);
+ prop.putNum("namecacheMiss.Insert", Domains.cacheMiss_Insert);
+ prop.putNum("namecache.noCache", Domains.nameCacheNoCachingPatternsSize());
prop.putNum("blacklistcache.size", Switchboard.urlBlacklist.blacklistCacheSize());
prop.putNum("searchevent.size", SearchEventCache.size());
prop.putNum("searchevent.hit", SearchEventCache.cacheHit);
diff --git a/source/net/yacy/cora/protocol/Domains.java b/source/net/yacy/cora/protocol/Domains.java
index e0fdf00f8..b7b3cb831 100644
--- a/source/net/yacy/cora/protocol/Domains.java
+++ b/source/net/yacy/cora/protocol/Domains.java
@@ -61,6 +61,8 @@ public class Domains {
private static final ConcurrentHashMap LOOKUP_SYNC = new ConcurrentHashMap();
private static List nameCacheNoCachingPatterns = Collections.synchronizedList(new LinkedList());
private static final List LOCALHOST_PATTERNS = makePatterns(LOCAL_PATTERNS);
+ public static long cacheHit_Hit = 0, cacheHit_Miss = 0, cacheHit_Insert = 0; // for statistics only; do not write
+ public static long cacheMiss_Hit = 0, cacheMiss_Miss = 0, cacheMiss_Insert = 0; // for statistics only; do not write
/**
* ! ! ! A T T E N T I O N A T T E N T I O N A T T E N T I O N ! ! !
@@ -470,9 +472,17 @@ public class Domains {
// trying to resolve host by doing a name cache lookup
ip = NAME_CACHE_HIT.get(host);
- if (ip != null) return ip;
+ if (ip != null) {
+ cacheHit_Hit++;
+ return ip;
+ }
+ cacheHit_Miss++;
- if (NAME_CACHE_MISS.containsKey(host)) return null;
+ if (NAME_CACHE_MISS.containsKey(host)) {
+ cacheMiss_Hit++;
+ return null;
+ }
+ cacheMiss_Miss++;
throw new UnknownHostException("host not in cache");
}
@@ -501,6 +511,7 @@ public class Domains {
if (!hosts.isEmpty()) return hosts.iterator().next();
final String host = i.getHostName();
NAME_CACHE_HIT.insertIfAbsent(host, i);
+ cacheHit_Insert++;
return host;
/*
// call i.getHostName() using concurrency to interrupt execution in case of a time-out
@@ -530,12 +541,16 @@ public class Domains {
ip = NAME_CACHE_HIT.get(host);
if (ip != null) {
//System.out.println("DNSLOOKUP-CACHE-HIT(CONC) " + host);
+ cacheHit_Hit++;
return ip;
}
+ cacheHit_Miss++;
if (NAME_CACHE_MISS.containsKey(host)) {
//System.out.println("DNSLOOKUP-CACHE-MISS(CONC) " + host);
+ cacheMiss_Hit++;
return null;
}
+ cacheMiss_Miss++;
// call dnsResolveNetBased(host) using concurrency to interrupt execution in case of a time-out
final Object sync_obj_new = new Object();
@@ -547,13 +562,17 @@ public class Domains {
if (ip != null) {
//System.out.println("DNSLOOKUP-CACHE-HIT(SYNC) " + host);
LOOKUP_SYNC.remove(host);
+ cacheHit_Hit++;
return ip;
}
+ cacheHit_Miss++;
if (NAME_CACHE_MISS.containsKey(host)) {
//System.out.println("DNSLOOKUP-CACHE-MISS(SYNC) " + host);
LOOKUP_SYNC.remove(host);
+ cacheMiss_Hit++;
return null;
}
+ cacheMiss_Miss++;
// do the dns lookup on the dns server
//if (!matchesList(host, nameCacheNoCachingPatterns)) System.out.println("DNSLOOKUP " + host);
@@ -563,6 +582,7 @@ public class Domains {
} catch (final UnknownHostException e) {
// add new entries
NAME_CACHE_MISS.insertIfAbsent(host, PRESENT);
+ cacheMiss_Insert++;
LOOKUP_SYNC.remove(host);
return null;
}
@@ -570,6 +590,7 @@ public class Domains {
if (ip != null && !ip.isLoopbackAddress() && !matchesList(host, nameCacheNoCachingPatterns)) {
// add new ip cache entries
NAME_CACHE_HIT.insertIfAbsent(host, ip);
+ cacheHit_Insert++;
// add also the isLocal host name caches
final boolean localp = ip.isAnyLocalAddress() || ip.isLinkLocalAddress() || ip.isSiteLocalAddress();
@@ -620,6 +641,10 @@ public class Domains {
return NAME_CACHE_MISS.size();
}
+ public static int nameCacheNoCachingPatternsSize() {
+ return nameCacheNoCachingPatterns.size();
+ }
+
private static String localHostName = "127.0.0.1";
private static Set localHostAddresses = new HashSet();
private static Set localHostNames = new HashSet();