Norconex / crawlers

Norconex Crawlers (or spiders) are flexible web and filesystem crawlers for collecting, parsing, and manipulating data from the web or filesystem to various data repositories such as search engines.
https://opensource.norconex.com/crawlers
Apache License 2.0
183 stars 68 forks source link

infinite loop with many threads #234

Closed nuliknol closed 8 years ago

nuliknol commented 8 years ago

I make it get into an infinite loop, with these rules:

<referenceFilters>
    <filter class="com.norconex.collector.core.filter.impl.ExtensionReferenceFilter" onMatch="exclude">jpg,gif,png,ico,css,js,gz,bz,tgz</filter>
  <filter class="com.norconex.collector.core.filter.impl.RegexReferenceFilter" onMatch="include" caseSensitive="false" >http://.*nz/.*</filter>
  <filter class="com.norconex.collector.core.filter.impl.RegexReferenceFilter" onMatch="include" caseSensitive="false" >http://.*nz</filter>
</referenceFilters>

This is the log file:

[niko@dev1 norconex-collector-http-2.3.0]$ ./collector-http.sh -a start -c /web/config/dev.xml 
INFO  [AbstractCrawlerConfig] Reference filter loaded: ExtensionReferenceFilter[onMatch=EXCLUDE,extensions=jpg,gif,png,ico,css,js,gz,bz,tgz,apk,rar,asec,zab,001,002,003,z01,isz,iwa,jar,ipa,pak,zip,xap,b1,webarchive,cso,dlc,cbr,egg,arc,air,edz,xsn,7z,ace,ex_,exe,bin,hqx,nbf,djprojects,wmz,pkg,dz,soundpack,as4a,dbz,pzip,cab,xzm,srr,bar,tot,diagcab,ark,aar,saz,r00,tar,zlib,deb,rpm,caseSensitive=false]
INFO  [AbstractCrawlerConfig] Reference filter loaded: RegexReferenceFilter[onMatch=INCLUDE,caseSensitive=false,regex=http://.*nz/.*]
INFO  [AbstractCrawlerConfig] Reference filter loaded: RegexReferenceFilter[onMatch=INCLUDE,caseSensitive=false,regex=http://.*nz]
INFO  [AbstractCrawlerConfig] Matadata filter loaded: RegexMetadataFilter[onMatch=INCLUDE,caseSensitive=false,field=Content-Type,regex=.*\btext/html\b.*]
INFO  [AbstractCrawlerConfig] Matadata filter loaded: RegexMetadataFilter[onMatch=INCLUDE,caseSensitive=false,field=Content-Type,regex=.*\btext/plain\b.*]
WARN  [HttpCrawlerConfig] The <sitemap ...> tag used as a crawler setting is deprecated, use <sitemapResolverFactory...> instead. The <sitemap> tag can now be used as a start URL.
INFO  [AbstractCollectorConfig] Configuration loaded: id=Minimum Config HTTP Collector; logsDir=/web/crawl/logs; progressDir=/web/crawl/progress
INFO  [JobSuite] JEF work directory is: /web/crawl/progress
INFO  [JobSuite] JEF log manager is : FileLogManager
INFO  [JobSuite] JEF job status store is : FileJobStatusStore
INFO  [AbstractCollector] Suite of 1 crawler jobs created.
INFO  [JobSuite] Initialization...
INFO  [JobSuite] No previous execution detected.
INFO  [JobSuite] Starting execution.
INFO  [AbstractCollector] Version: Norconex HTTP Collector 2.3.0 (Norconex Inc.)
INFO  [AbstractCollector] Version: Norconex Collector Core 1.3.0 (Norconex Inc.)
INFO  [AbstractCollector] Version: Norconex Importer 2.4.0 (Norconex Inc.)
INFO  [AbstractCollector] Version: Norconex JEF 4.0.7 (Norconex Inc.)
INFO  [AbstractCollector] Version: Norconex Committer Core 2.0.3 (Norconex Inc.)
INFO  [JobSuite] Running Norconex Minimum Test Page: BEGIN (Tue Mar 01 14:11:37 CST 2016)
INFO  [MapDBCrawlDataStore] Initializing reference store /web/crawl/wkdir/crawlstore/mapdb/Norconex_32_Minimum_32_Test_32_Page/
INFO  [MapDBCrawlDataStore] /web/crawl/wkdir/crawlstore/mapdb/Norconex_32_Minimum_32_Test_32_Page/: Done initializing databases.
INFO  [HttpCrawler] Norconex Minimum Test Page: RobotsTxt support: true
INFO  [HttpCrawler] Norconex Minimum Test Page: RobotsMeta support: true
INFO  [HttpCrawler] Norconex Minimum Test Page: Sitemap support: false
INFO  [HttpCrawler] Norconex Minimum Test Page: Canonical links support: true
INFO  [HttpCrawler] Norconex Minimum Test Page: User-Agent: <None specified>
INFO  [HttpCrawler] 1 start URLs identified.
INFO  [CrawlerEventManager]           CRAWLER_STARTED
INFO  [AbstractCrawler] Norconex Minimum Test Page: Crawling references...
INFO  [CrawlerEventManager] DOCUMENT_METADATA_FETCHED: http://xxxxxxxxxx/index.php?plantilla=TST
INFO  [CrawlerEventManager]          DOCUMENT_FETCHED: http://xxxxxxxxxx/index.php?plantilla=TST
INFO  [CrawlerEventManager]       CREATED_ROBOTS_META: http://xxxxxxxxxx/index.php?plantilla=TST
INFO  [CrawlerEventManager]           REJECTED_FILTER: http://www.xxxxxxxxxx.com/ukr/
INFO  [CrawlerEventManager]            URLS_EXTRACTED: http://xxxxxxxxxx/index.php?plantilla=TST
INFO  [CrawlerEventManager]         DOCUMENT_IMPORTED: http://xxxxxxxxxx/index.php?plantilla=TST
INFO  [CrawlerEventManager]    DOCUMENT_COMMITTED_ADD: http://xxxxxxxxxx/index.php?plantilla=TST

The crawler did everything correctly since it was just a 2 url simple page for testing purposes, and it should exit without any problem, but it stalled. After a cople of minutes of watching the "java" process consuming 90% of the CPU I decided to Control-C to interrupt it and this is what I have got on the console:

CException in thread "pool-1-thread-100" Exception in thread "pool-1-thread-40" Exception in thread "pool-1-thread-22" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-31" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-19" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-69" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-64" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-3" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-51" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-57" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-70" Exception in thread "pool-1-thread-62" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-55" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-83" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-53" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-33" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-98" Exception in thread "pool-1-thread-2" Exception in thread "pool-1-thread-82" Exception in thread "pool-1-thread-92" Exception in thread "pool-1-thread-71" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-17" Exception in thread "pool-1-thread-25" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-37" Exception in thread "pool-1-thread-7" Exception in thread "pool-1-thread-86" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-88" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-52" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-68" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-14" Exception in thread "pool-1-thread-79" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-73" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-28" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-87" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-26" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-56" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-8" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-91" Exception in thread "pool-1-thread-16" Exception in thread "pool-1-thread-58" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-10" Exception in thread "pool-1-thread-97" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-9" Exception in thread "pool-1-thread-85" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-18" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-4" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-39" Exception in thread "pool-1-thread-96" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-6" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-35" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-46" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-20" Exception in thread "pool-1-thread-66" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-41" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "pool-1-thread-11" java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
java.lang.IllegalAccessError: already closed
    at org.mapdb.EngineWrapper$1.get(EngineWrapper.java:472)
    at org.mapdb.EngineWrapper.get(EngineWrapper.java:58)
    at org.mapdb.Atomic$Long.get(Atomic.java:315)
    at org.mapdb.Queues$SimpleQueue.poll(Queues.java:127)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:76)
    at com.norconex.collector.core.data.store.impl.mapdb.MappedQueue.poll(MappedQueue.java:33)
    at com.norconex.collector.core.data.store.impl.mapdb.MapDBCrawlDataStore.nextQueued(MapDBCrawlDataStore.java:176)
    at com.norconex.collector.core.crawler.AbstractCrawler.processNextReference(AbstractCrawler.java:365)
    at com.norconex.collector.core.crawler.AbstractCrawler$ProcessReferencesRunnable.run(AbstractCrawler.java:723)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)[niko@dev1 norconex-collector-http-2.3.0]$ 
[niko@dev1 norconex-collector-http-2.3.0]$ 

This is my config file. Real urls have been replaced for privacy purposes:

<?xml version="1.0" encoding="UTF-8"?>
<httpcollector id="Minimum Config HTTP Collector">
  <progressDir>/web/crawl/progress</progressDir>
  <logsDir>/web/crawl/logs</logsDir>

  <crawlers>
    <crawler id="Norconex Minimum Test Page">
      <startURLs stayOnDomain="false" stayOnPort="false" stayOnProtocol="false">
        <url>http://xxxxxxxxx.nz/index.php?plantilla=TST</url>
      </startURLs>
      <workDir>/web/crawl/wkdir</workDir>
      <numThreads>100</numThreads>
      <maxDepth>-1</maxDepth>
      <sitemap ignore="true" />
      <sitemapResolverFactory ignore="true" />
      <delay default="1000" />

  <urlNormalizer class="com.norconex.collector.http.url.impl.GenericURLNormalizer">
    <normalizations>
        removeFragment, lowerCaseSchemeHost, upperCaseEscapeSequence,
        decodeUnreservedCharacters, removeDefaultPort, encodeNonURICharacters,
        removeDotSegments
    </normalizations>
  </urlNormalizer>

<metadataFetcher class="com.norconex.collector.http.fetch.impl.GenericMetadataFetcher" />

<referenceFilters>
    <filter class="com.norconex.collector.core.filter.impl.ExtensionReferenceFilter" onMatch="exclude">jpg,gif,png,ico,css,js,gz,bz,tgz,apk,rar,asec,zab,001,002,003,z01,isz,iwa,jar,ipa,pak,zip,xap,b1,webarchive,cso,dlc,cbr,egg,arc,air,edz,xsn,7z,ace,ex_,exe,bin,hqx,nbf,djprojects,wmz,pkg,dz,soundpack,as4a,dbz,pzip,cab,xzm,srr,bar,tot,diagcab,ark,aar,saz,r00,tar,zlib,deb,rpm</filter>
  <filter class="com.norconex.collector.core.filter.impl.RegexReferenceFilter" onMatch="include" caseSensitive="false" >http://.*nz/.*</filter>
  <filter class="com.norconex.collector.core.filter.impl.RegexReferenceFilter" onMatch="include" caseSensitive="false" >http://.*nz</filter>
</referenceFilters>

<metadataFilters>
  <filter class="com.norconex.collector.core.filter.impl.RegexMetadataFilter" field="Content-Type">
    .*\btext/html\b.*
  </filter>
  <filter class="com.norconex.collector.core.filter.impl.RegexMetadataFilter" field="Content-Type">
    .*\btext/plain\b.*
  </filter>
</metadataFilters>

    <importer>
        <documentParserFactory class="com.norconex.importer.parser.GenericDocumentParserFactory">
            <ignoredContentTypes>text/html</ignoredContentTypes>
            <ignoredContentTypes>text/plain</ignoredContentTypes>
        </documentParserFactory>
        <postParseHandlers>

            <tagger class="com.norconex.importer.handler.tagger.impl.KeepOnlyTagger">
                <fields>title,keywords,description,document.reference</fields>
            </tagger>
        </postParseHandlers>
    </importer> 

    <committer class="com.norconex.committer.core.impl.FileSystemCommitter">
        <directory>/web/crawl/pages</directory>
    </committer>
    </crawler>
  </crawlers>

</httpcollector>

I can debug it if you tell me what to do.

nuliknol commented 8 years ago

this is the page I use as the start url:

<html>
<a href="http://www.zzzzzzzz.com/ukr/">one</a>
<Br>
<a href="http://www.xxxxxxxx.nz/">two</a>
</html>
<!-- Execution starts at 1456861631.4395 (1456861631)
Time total: 0.018090009689331 (1456861631.4576) diff=0
 -->

So, it gets this page, processes it, and loops.
nuliknol commented 8 years ago

I have been testing it and, I found that the bug is not always reproducible. In about 3 out of 10 times it loops and the other 70% of times it runs fine. No web traffic is observed during the loop on ethernet card. So, I suspected it might be a race condition in thread communication. I changed to 5 threads. (because in my example, I have 100 threads, and my page "two" has like 5,000 links) With 5 threads I wasn't been able to reproduce this bug no matter how much I ran the tests. But wait, I have a 1,000 milliseconds delay, that will make any thread locking issue to hide!! So, I changed the delay to 0, and increased the number of threads to 200. With this configuration I have been able to lock the crawler in first 10 seconds of run in about 50% of the runs. Apparently it doesn't matter what filters are there, or what pages you download, just running many threads with 0 delay will create thread locking issue, and it loops forever. I observe 100% CPU usage, with no network traffic detected on the ethernet interface. Race conditions between threads are very difficult to find, you have to check all the places where the threads make locks, and analyze if there is a possibility of a lock between threads. In my tests locks start from using 10 threads with 0 delay but on another machine it may be different number. Also, it doesn't mean that if you put threads to like 5,000 it will lock up, because by the time it gets to the thread #4999 your first thread may be releasing all resources it had, so you may not get into race condition. Also, a good testing page for this use case, would be a dummy site with a lot of links and no images or other objects. Because, in my case, I do not download any object different from html/text, this makes the crawler process the data fast, and it is more prone to create a race condition between threads. I am available for debugging if you tell me what to do.

essiembre commented 8 years ago

Looks like you uncovered a nasty one. I had people use it very aggressively before without triggering that condition. I will try my best to reproduce.

nuliknol commented 8 years ago

I am running it right now with 200 threads, but a 5,000 delay, no problems so far. Once it starts crawling , I suspect it will be difficult to enter the lock. To reproduce, you have to direct the crawler to a starting page with hundreds of links.

nuliknol commented 8 years ago

To make it easier for you I made a video of the bug. We crawl sensitive information so if you give me an email address I can send you the link to download the video and also configuration files so you can reproduce it on your side and make tests.

essiembre commented 8 years ago

You can use the email address in my github profile.

essiembre commented 8 years ago

I see in your stacktrace the issue comes from MapDB. I can try to upgrade to the latest version of MapDB to see if that fixes the problem but before I do so, can you try with another database to store the URL? Can you try this inside your crawler configuration:

<crawlDataStoreFactory 
          class="com.norconex.collector.core.data.store.impl.mvstore.MVStoreCrawlDataStoreFactory" />
nuliknol commented 8 years ago

Nope. Not reproducible with MVStore. Tried about 25 times, runs perfectly. Switched back to MapDB and got it locked on the first one. It is a MapDB issue then.

Have you been able to reproduce in your environment?

On Tue, Mar 1, 2016 at 9:36 PM, Pascal Essiembre notifications@github.com wrote:

I see in your stacktrace the issue comes from MapDB. I can try to upgrade to the latest version of MapDB to see if that fixes the problem but before I do so, can you try with another database to store the URL? Can you try this inside your crawler configuration:

<crawlDataStoreFactory class="com.norconex.collector.core.data.store.impl.mvstore.MVStoreCrawlDataStoreFactory" />

— Reply to this email directly or view it on GitHub https://github.com/Norconex/collector-http/issues/234#issuecomment-191040442 .

essiembre commented 8 years ago

I was about to spend time to reproduce but the moment I saw it was MapDB I stopped. You confirmed it is indeed the issue so I suggest you stick with MVStore for now. I will leave this ticket open as a bug. I will upgrade the MapDB library when I get a chance and have you test again if you do not mind.

nuliknol commented 8 years ago

perfect!

On Wed, Mar 2, 2016 at 10:18 AM, Pascal Essiembre notifications@github.com wrote:

I was about to spend time to reproduce but the moment I saw it was MapDB I stopped. You confirmed it is indeed the issue so I suggest you stick with MVStore for now. I will leave this ticket open as a bug. I will upgrade the MapDB library when I get a chance and have you test again if you do not mind.

— Reply to this email directly or view it on GitHub https://github.com/Norconex/collector-http/issues/234#issuecomment-191310043 .

essiembre commented 8 years ago

I made a new snapshot release with the latest mapdb library version. I suggest you install in a new location to avoid duplicate jars with different versions.

Let me know if that version fixes the issue. Otherwise, I may make MVStore the default URL store if it works just fine for you (I also updated that library version in that snapshot release).

essiembre commented 8 years ago

From @nuliknol:

Nope, same bug, even worse. I ran it 2 times and both times it freezed.

Keep using the MVStore implementation then. Since nobody ever reported issues after using MVStore, I will make it the default implementation in the next release.

essiembre commented 8 years ago

Marking it as fixed since the default crawl data store in the latest snapshot release has been changed to the more stable MVStore.

Please confirm the snapshot release (with MVStore as default crawl store) fixes your issue.

essiembre commented 8 years ago

@nuliknol: Have you witnessed any thread locking issues with the snapshot release (using the new MVStore default)? Can we close?

essiembre commented 8 years ago

The fix was released in 2.5.0 (now using MVStore as default which does not have this issue).