From 6ed9c0164e252bf5c7a07c5bccfb1b28d002daf1 Mon Sep 17 00:00:00 2001 From: Michael Peter Christen Date: Fri, 28 Feb 2014 15:02:01 +0100 Subject: [PATCH] attaching names to all Threads to get a better view in profiling tools like VisualVM --- .../federate/solr/connector/AbstractSolrConnector.java | 2 ++ .../solr/connector/ConcurrentUpdateSolrConnector.java | 7 ++++--- .../federate/solr/connector/EmbeddedSolrConnector.java | 1 + .../cora/federate/solr/connector/MirrorSolrConnector.java | 2 ++ .../net/yacy/cora/federate/solr/instance/ServerShard.java | 2 ++ source/net/yacy/cora/protocol/http/HTTPClient.java | 2 ++ source/net/yacy/cora/sorting/Array.java | 1 + source/net/yacy/crawler/data/CrawlQueues.java | 1 + source/net/yacy/crawler/robots/RobotsTxt.java | 1 + source/net/yacy/http/Jetty8HttpServerImpl.java | 1 + source/net/yacy/kelondro/rwi/IODispatcher.java | 1 + source/net/yacy/kelondro/rwi/IndexCell.java | 5 ++++- source/net/yacy/kelondro/workflow/InstantBusyThread.java | 2 +- source/net/yacy/peers/Protocol.java | 1 + source/net/yacy/peers/RemoteSearch.java | 2 ++ source/net/yacy/peers/graphics/WebStructureGraph.java | 1 + source/net/yacy/search/MemoryTracker.java | 1 + source/net/yacy/search/Switchboard.java | 1 + source/net/yacy/search/query/SearchEvent.java | 1 + 19 files changed, 30 insertions(+), 5 deletions(-) diff --git a/source/net/yacy/cora/federate/solr/connector/AbstractSolrConnector.java b/source/net/yacy/cora/federate/solr/connector/AbstractSolrConnector.java index fee62dcc0..cca65fc23 100644 --- a/source/net/yacy/cora/federate/solr/connector/AbstractSolrConnector.java +++ b/source/net/yacy/cora/federate/solr/connector/AbstractSolrConnector.java @@ -147,6 +147,7 @@ public abstract class AbstractSolrConnector implements SolrConnector { final Thread t = new Thread() { @Override public void run() { + this.setName("AbstractSolrConnector:concurrentDocumentsByQuery(" + querystring + ")"); int o = offset; int count = 0; while (System.currentTimeMillis() < endtime && count < maxcount) { @@ -178,6 +179,7 @@ public abstract class AbstractSolrConnector implements SolrConnector { final Thread t = new Thread() { @Override public void run() { + this.setName("AbstractSolrConnector:concurrentIDsByQuery(" + querystring + ")"); int o = offset; while (System.currentTimeMillis() < endtime) { try { diff --git a/source/net/yacy/cora/federate/solr/connector/ConcurrentUpdateSolrConnector.java b/source/net/yacy/cora/federate/solr/connector/ConcurrentUpdateSolrConnector.java index 2185ed535..9eb75070f 100644 --- a/source/net/yacy/cora/federate/solr/connector/ConcurrentUpdateSolrConnector.java +++ b/source/net/yacy/cora/federate/solr/connector/ConcurrentUpdateSolrConnector.java @@ -58,9 +58,10 @@ public class ConcurrentUpdateSolrConnector implements SolrConnector { private final static Object POISON_PROCESS = new Object(); - private class ProcessHandler implements Runnable { + private class ProcessHandler extends Thread { @Override public void run() { + try { Object process; Collection docs = new ArrayList(); @@ -114,7 +115,7 @@ public class ConcurrentUpdateSolrConnector implements SolrConnector { private ARC metadataCache; private ARH missCache; private BlockingQueue processQueue; - private Thread processHandler; + private ProcessHandler processHandler; public ConcurrentUpdateSolrConnector(final SolrConnector connector, final int updateCapacity, final int idCacheCapacity, final int concurrency) { this.connector = connector; @@ -200,7 +201,7 @@ public class ConcurrentUpdateSolrConnector implements SolrConnector { public void ensureAliveProcessHandler() { if (this.processHandler == null || !this.processHandler.isAlive()) { - this.processHandler = new Thread(new ProcessHandler()); + this.processHandler = new ProcessHandler(); this.processHandler.setName(this.getClass().getName() + "_ProcessHandler"); this.processHandler.start(); } diff --git a/source/net/yacy/cora/federate/solr/connector/EmbeddedSolrConnector.java b/source/net/yacy/cora/federate/solr/connector/EmbeddedSolrConnector.java index bb052ec2b..366990b09 100644 --- a/source/net/yacy/cora/federate/solr/connector/EmbeddedSolrConnector.java +++ b/source/net/yacy/cora/federate/solr/connector/EmbeddedSolrConnector.java @@ -423,6 +423,7 @@ public class EmbeddedSolrConnector extends SolrServerConnector implements SolrCo final Thread t = new Thread() { @Override public void run() { + this.setName("EmbeddedSolrConnector.concurrentIDsByQuery(" + querystring + ")"); int o = offset, responseCount = 0; DocListSearcher docListSearcher = null; while (System.currentTimeMillis() < endtime) { diff --git a/source/net/yacy/cora/federate/solr/connector/MirrorSolrConnector.java b/source/net/yacy/cora/federate/solr/connector/MirrorSolrConnector.java index 2d42d9039..8e4b46fd6 100644 --- a/source/net/yacy/cora/federate/solr/connector/MirrorSolrConnector.java +++ b/source/net/yacy/cora/federate/solr/connector/MirrorSolrConnector.java @@ -347,6 +347,7 @@ public class MirrorSolrConnector extends AbstractSolrConnector implements SolrCo Thread t0 = new Thread() { @Override public void run() { + this.setName("MirrorSolrConnector.getCountByQuery/t0"); try { count.addAndGet(MirrorSolrConnector.this.solr0.getCountByQuery(querystring)); } catch (final IOException e) {} @@ -356,6 +357,7 @@ public class MirrorSolrConnector extends AbstractSolrConnector implements SolrCo Thread t1 = new Thread() { @Override public void run() { + this.setName("MirrorSolrConnector.getCountByQuery/t1"); try { count.addAndGet(MirrorSolrConnector.this.solr1.getCountByQuery(querystring)); } catch (final IOException e) {} diff --git a/source/net/yacy/cora/federate/solr/instance/ServerShard.java b/source/net/yacy/cora/federate/solr/instance/ServerShard.java index 3123752d7..08cb59047 100644 --- a/source/net/yacy/cora/federate/solr/instance/ServerShard.java +++ b/source/net/yacy/cora/federate/solr/instance/ServerShard.java @@ -365,6 +365,7 @@ public class ServerShard extends SolrServer { Thread t0 = new Thread() { @Override public void run() { + this.setName("ServerShard.query/1(" + params.toString() + ")"); QueryResponse rsp; try { rsp = s.query(params); @@ -397,6 +398,7 @@ public class ServerShard extends SolrServer { Thread t0 = new Thread() { @Override public void run() { + this.setName("ServerShard.query/2(" + params.toString() + ")"); QueryResponse rsp; try { rsp = s.query(params, method); diff --git a/source/net/yacy/cora/protocol/http/HTTPClient.java b/source/net/yacy/cora/protocol/http/HTTPClient.java index 6ede93c49..f35333b0e 100644 --- a/source/net/yacy/cora/protocol/http/HTTPClient.java +++ b/source/net/yacy/cora/protocol/http/HTTPClient.java @@ -691,6 +691,7 @@ public class HTTPClient { final Throwable[] te = new Throwable[]{null}; Thread t = new Thread() { public void run() { + this.setName("HTTPClient.execute(" + httpUriRequest.getURI() + ")"); try { thr[0] = client.execute(httpUriRequest, context); } catch (Throwable e) { @@ -883,6 +884,7 @@ public class HTTPClient { public IdleConnectionMonitorThread(HttpClientConnectionManager connMgr) { super(); + this.setName("HTTPClient.IdleConnectionMonitorThread"); this.connMgr = connMgr; } diff --git a/source/net/yacy/cora/sorting/Array.java b/source/net/yacy/cora/sorting/Array.java index bfc3f8f1b..48826c7e4 100644 --- a/source/net/yacy/cora/sorting/Array.java +++ b/source/net/yacy/cora/sorting/Array.java @@ -64,6 +64,7 @@ public class Array { private static class SortJobWorker extends Thread { public void run() { + this.setName("Array.SortJobWorker"); SortJob job; try { while ((job = sortJobs.take()) != POISON_JOB_WORKER) { diff --git a/source/net/yacy/crawler/data/CrawlQueues.java b/source/net/yacy/crawler/data/CrawlQueues.java index af4c20c06..f7a5c622f 100644 --- a/source/net/yacy/crawler/data/CrawlQueues.java +++ b/source/net/yacy/crawler/data/CrawlQueues.java @@ -627,6 +627,7 @@ public class CrawlQueues { this.code = Integer.valueOf(entry.hashCode()); this.setPriority(Thread.MIN_PRIORITY); // http requests from the crawler should not cause that other functions work worse this.profile = CrawlQueues.this.sb.crawler.get(UTF8.getBytes(this.request.profileHandle())); + this.setName("CrawlQueues.Loader(" + entry.url() + ")"); } private long age() { diff --git a/source/net/yacy/crawler/robots/RobotsTxt.java b/source/net/yacy/crawler/robots/RobotsTxt.java index c90039e92..6723cfa04 100644 --- a/source/net/yacy/crawler/robots/RobotsTxt.java +++ b/source/net/yacy/crawler/robots/RobotsTxt.java @@ -200,6 +200,7 @@ public class RobotsTxt { if (robotsTable == null || robotsTable.containsKey(robotsTable.encodedKey(urlHostPort))) return; Thread t = new Thread() { public void run(){ + this.setName("Robots.txt:ensureExist(" + theURL.toNormalform(true) + ")"); // make or get a synchronization object DomSync syncObj = RobotsTxt.this.syncObjects.get(urlHostPort); if (syncObj == null) { diff --git a/source/net/yacy/http/Jetty8HttpServerImpl.java b/source/net/yacy/http/Jetty8HttpServerImpl.java index 085445fb7..4d7c86842 100644 --- a/source/net/yacy/http/Jetty8HttpServerImpl.java +++ b/source/net/yacy/http/Jetty8HttpServerImpl.java @@ -272,6 +272,7 @@ public class Jetty8HttpServerImpl implements YaCyHttpServer { @Override public void run() { + this.setName("Jetty8HttpServer.reconnect"); try { Thread.sleep(milsec); } catch (final InterruptedException e) { diff --git a/source/net/yacy/kelondro/rwi/IODispatcher.java b/source/net/yacy/kelondro/rwi/IODispatcher.java index 15ad23d97..af7675761 100644 --- a/source/net/yacy/kelondro/rwi/IODispatcher.java +++ b/source/net/yacy/kelondro/rwi/IODispatcher.java @@ -65,6 +65,7 @@ public class IODispatcher extends Thread { this.mergeQueue = new ArrayBlockingQueue(mergeQueueLength); this.writeBufferSize = writeBufferSize; this.terminate = false; + this.setName("IODispatcher"); } public void terminate() { diff --git a/source/net/yacy/kelondro/rwi/IndexCell.java b/source/net/yacy/kelondro/rwi/IndexCell.java index fa9651d24..2a71decad 100644 --- a/source/net/yacy/kelondro/rwi/IndexCell.java +++ b/source/net/yacy/kelondro/rwi/IndexCell.java @@ -107,11 +107,14 @@ public final class IndexCell extends AbstractBu this.writeBufferSize = writeBufferSize; this.removeDelayedURLs = new TreeMap(Word.commonHashOrder); this.flushShallRun = true; - this.flushThread = new FlushThread(); + this.flushThread = new FlushThread(cellPath.toString()); this.flushThread.start(); } private class FlushThread extends Thread { + public FlushThread(String name) { + this.setName("IndexCell.FlushThread(" + name + ")"); + } @Override public void run() { while (IndexCell.this.flushShallRun) { diff --git a/source/net/yacy/kelondro/workflow/InstantBusyThread.java b/source/net/yacy/kelondro/workflow/InstantBusyThread.java index ebac7f506..9efd38b05 100644 --- a/source/net/yacy/kelondro/workflow/InstantBusyThread.java +++ b/source/net/yacy/kelondro/workflow/InstantBusyThread.java @@ -78,7 +78,7 @@ public final class InstantBusyThread extends AbstractBusyThread implements BusyT throw new RuntimeException("serverInstantThread, wrong declaration of freemem: " + e.getMessage()); } this.environment = (env instanceof Class) ? null : env; - setName(theClass.getName() + "." + jobExec); + setName("BusyThread " + theClass.getName() + "." + jobExec); this.handle = Long.valueOf(System.currentTimeMillis() + getName().hashCode()); } diff --git a/source/net/yacy/peers/Protocol.java b/source/net/yacy/peers/Protocol.java index 137083a0c..62546c40d 100644 --- a/source/net/yacy/peers/Protocol.java +++ b/source/net/yacy/peers/Protocol.java @@ -1060,6 +1060,7 @@ public final class Protocol { final int solrtimeout = Switchboard.getSwitchboard().getConfigInt(SwitchboardConstants.FEDERATED_SERVICE_SOLR_INDEXING_TIMEOUT, 6000); Thread remoteRequest = new Thread() { public void run() { + this.setName("Protocol.solrQuery(" + solrQuery.getQuery() + " to " + target.hash + ")"); try { RemoteInstance instance = new RemoteInstance("http://" + address, null, "solr", solrtimeout); // this is a 'patch configuration' which considers 'solr' as default collection try { diff --git a/source/net/yacy/peers/RemoteSearch.java b/source/net/yacy/peers/RemoteSearch.java index 3e699e8f4..5c0a3fd40 100644 --- a/source/net/yacy/peers/RemoteSearch.java +++ b/source/net/yacy/peers/RemoteSearch.java @@ -266,6 +266,7 @@ public class RemoteSearch extends Thread { Thread secondary = new Thread() { @Override public void run() { + this.setName("RemoteSearch.secondaryRemoteSearch(" + wordhashes + " to " + targethash + ")"); event.oneFeederStarted(); try { int urls = Protocol.secondarySearch( @@ -318,6 +319,7 @@ public class RemoteSearch extends Thread { Thread solr = new Thread() { @Override public void run() { + this.setName("RemoteSearch.solrRemoteSearch(" + solrQuery.getQuery() + " to " + targetPeer.hash + ")"); int urls = 0; try { event.oneFeederStarted(); diff --git a/source/net/yacy/peers/graphics/WebStructureGraph.java b/source/net/yacy/peers/graphics/WebStructureGraph.java index 8b652f892..d6b7f3139 100644 --- a/source/net/yacy/peers/graphics/WebStructureGraph.java +++ b/source/net/yacy/peers/graphics/WebStructureGraph.java @@ -139,6 +139,7 @@ public class WebStructureGraph { private class PublicRefDNSResolvingProcess extends Thread { private PublicRefDNSResolvingProcess() { + this.setName("WebStructureGraph.PublicRefDNSResolvingProcess"); } @Override diff --git a/source/net/yacy/search/MemoryTracker.java b/source/net/yacy/search/MemoryTracker.java index c31f338f1..41cb0faf7 100644 --- a/source/net/yacy/search/MemoryTracker.java +++ b/source/net/yacy/search/MemoryTracker.java @@ -48,6 +48,7 @@ public class MemoryTracker extends Thread { public MemoryTracker(final long time) { this.delaytime = time; running = true; + this.setName("MemoryTracker"); } public void run() { diff --git a/source/net/yacy/search/Switchboard.java b/source/net/yacy/search/Switchboard.java index 7cc6a517d..13b1f0bad 100644 --- a/source/net/yacy/search/Switchboard.java +++ b/source/net/yacy/search/Switchboard.java @@ -1148,6 +1148,7 @@ public final class Switchboard extends serverSwitch { // finally start jobs which shall be started after start-up new Thread() { public void run() { + Thread.currentThread().setName("Switchboard.setHttpServer"); try {Thread.sleep(10000);} catch (final InterruptedException e) {} // needs httpd up execAPIActions(); // trigger startup actions } diff --git a/source/net/yacy/search/query/SearchEvent.java b/source/net/yacy/search/query/SearchEvent.java index 32ddbad46..2b425a721 100644 --- a/source/net/yacy/search/query/SearchEvent.java +++ b/source/net/yacy/search/query/SearchEvent.java @@ -316,6 +316,7 @@ public final class SearchEvent { new Thread() { @Override public void run() { + this.setName("SearchEvent.init(" + query.getQueryGoal().getQueryString(false) + ")"); Thread.currentThread().setName("SearchEvent.primaryRemoteSearches"); RemoteSearch.primaryRemoteSearches( SearchEvent.this,