SVN 7160: ConcurrentModificationException und mehr

Hier finden YaCy User Hilfe wenn was nicht funktioniert oder anders funktioniert als man dachte. Bei offensichtlichen Fehlern diese bitte gleich in die Bugs (http://bugs.yacy.net) eintragen.
Forumsregeln
In diesem Forum geht es um Benutzungsprobleme und Anfragen für Hilfe. Wird dabei ein Bug identifiziert, wird der thread zur Bearbeitung in die Bug-Sektion verschoben. Wer hier also einen Thread eingestellt hat und ihn vermisst, wird ihn sicherlich in der Bug-Sektion wiederfinden.

SVN 7160: ConcurrentModificationException und mehr

Beitragvon Quix0r » Do Sep 16, 2010 7:14 pm

Hallo zusammen,

ich habe gestern und heute versucht, eine ConcurrentModificationException zu fixen, was mir auch gelungen ist. Diese trat im Access-Tracker auf, sowohl Serverlet als auch core (source-Verzeichnis) musste ich anpassen:

- htroot/AccessTracker_p.java, diverse Zeilen
- source/de/anomic/server/serverAccessTracker.java, diverse Zeilen.

Es wird dort eine LinkedList verwendet, die aber nicht thread-safe ist (weshalb ja auch die CME kam). Diese habe ich erstmal gegen ConcurrentLinkedQueue geaendert, und alle Type-Hints von LinkedList<Track> auf Collection<Track> geaendert.

Das hat auch soweit den Bug gefixt. Nur sobald ich den Proxy wieder mehr verwendet hatte, kamen nach zirka 15-20 Minuten haufenweise IllegalMonitorStateException von den Session-Threads.

Hier solch eine typische (die letzten zwei Zeilen kamen dann auch sehr viele (40 um genau zu sein, da ich abgebrochen habe):
Code: Alles auswählen
E 2010/09/16 17:04:58 WorkflowThread thread 'httpd:8080': java.lang.IllegalMonitorStateException
java.lang.IllegalMonitorStateException
    at java.lang.Object.notify(Native Method)
    at de.anomic.server.serverCore.terminateOldSessions(serverCore.java:158)
    at de.anomic.server.serverCore.job(serverCore.java:325)
    at net.yacy.kelondro.workflow.AbstractBusyThread.run(AbstractBusyThread.java:161)
I 2010/09/16 17:05:06 SERVER termination of old sessions: before = 500, after = 500
I 2010/09/16 17:05:06 SERVER termination of old sessions: before = 501, after = 501

Der Rechner - Quad Core 2,5 GHz mit 8 GB RAM - hatte dann alle Cores fast voll ausgelastet - mehr als 360% Last durch den java-Prozess.

Diese konnte ich auf einen fehlenden synchronized-Block in serverCore.java um den notify()-Aufruf zurueckfuehren, was auch letztendlich die Exception gefixt hat.

Kann sich bitte mal wer das Patch von mir ansehen? Auch wirft der Proxy viele SocketException's ("Broken pipe"), sowohl bei der Nutzung von FindLinks als auch teilweise hier im Forum.

Hier ist mal eine von denen - zirka 200 solcher pro yacy-Logfile:
Code: Alles auswählen
W 2010/09/16 17:03:12 StackTrace Broken pipe
java.net.SocketException: Broken pipe
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
    at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
    at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
    at de.anomic.http.server.ChunkedOutputStream.write(ChunkedOutputStream.java:78)
    at org.apache.http.entity.BasicHttpEntity.writeTo(BasicHttpEntity.java:130)
    at org.apache.http.entity.HttpEntityWrapper.writeTo(HttpEntityWrapper.java:101)
    at org.apache.http.conn.BasicManagedEntity.writeTo(BasicManagedEntity.java:108)
    at net.yacy.cora.protocol.http.HTTPClient.writeTo(HTTPClient.java:407)
    at de.anomic.http.server.HTTPDProxyHandler.fulfillRequestFromWeb(HTTPDProxyHandler.java:621)
    at de.anomic.http.server.HTTPDProxyHandler.doGet(HTTPDProxyHandler.java:389)
    at de.anomic.http.server.HTTPDemon.GET(HTTPDemon.java:420)
    at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at de.anomic.server.serverCore$Session.listen(serverCore.java:729)
    at de.anomic.server.serverCore$Session.run(serverCore.java:628)
W 2010/09/16 17:03:12 PROXY Error while processing request 'GET http://www.jmm.lt/sveciai/list.php?page=2&order=desc HTTP/1.1':
Session_192.168.1.1:42756#0
Broken pipe


Hier das Patch:
http://www.free-search.yacy/repository/ ... .patch.bz2

Oder alternativ:
http://www.mxchange.org/downloads/yacy/ ... .patch.bz2

Roland
Quix0r
 
Beiträge: 1345
Registriert: Di Jul 31, 2007 9:22 am
Wohnort: Krefeld

Re: SVN 7160: ConcurrentModificationException und mehr

Beitragvon Orbiter » Fr Sep 17, 2010 12:03 am

hier auf eine concurrency-fähige Datenstrukur zu gehen ist eine gute Idee, wenn ich auch nicht die Blocking Queue nehmen würde. Hab daher deinen Patch in gewisser Weise umgesetzt, nur nicht ganz vollständig (da gabs noch eine synchronized das ich da lassen wollte) und mit anderem Datentyp (ConcurrentLinkedQueue). SVN 7163
Orbiter
 
Beiträge: 5793
Registriert: Di Jun 26, 2007 10:58 pm
Wohnort: Frankfurt am Main

Re: SVN 7160: ConcurrentModificationException und mehr

Beitragvon Quix0r » Fr Sep 17, 2010 12:17 am

Okay, in den Servlets koennen also auch Thread-unsichere Objekte verwendet werden? Hattest den Teil nicht aus Patch uebernommen, daher meine Nachfrage. :)

Das wie du es gemacht hast, hatte ich auch. Es kamen dann die besagten IllegalNotifyStateException. Deswegen hatte ich den s.notify()-Aufruf in serverCore.java mit einem synchronized (s) abgesichert. Mein Patch ist aktualisiert und selbe URL.
Quix0r
 
Beiträge: 1345
Registriert: Di Jul 31, 2007 9:22 am
Wohnort: Krefeld

Re: SVN 7160: ConcurrentModificationException und mehr

Beitragvon Orbiter » Fr Sep 17, 2010 11:21 am

okidoki, wesentliches dazu in SVN 7164
Orbiter
 
Beiträge: 5793
Registriert: Di Jun 26, 2007 10:58 pm
Wohnort: Frankfurt am Main

Re: SVN 7160: ConcurrentModificationException und mehr

Beitragvon Quix0r » Fr Okt 01, 2010 4:28 am

Und noch eine mit aktuellem trunk:
Code: Alles auswählen
W 2010/10/01 05:25:22 StackTrace null
java.util.ConcurrentModificationException
        at java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:373)
        at java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:392)
        at java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:391)
        at net.yacy.cora.storage.SimpleARC.getKeys(SimpleARC.java:112)
        at net.yacy.cora.storage.HashARC.getKeys(HashARC.java:27)
        at net.yacy.cora.storage.ConcurrentARC.getKeys(ConcurrentARC.java:117)
        at net.yacy.cora.protocol.Domains.getHostName(Domains.java:467)
        at net.yacy.cora.protocol.Domains.isLocal(Domains.java:731)
        at net.yacy.cora.protocol.Domains.isLocal(Domains.java:739)
        at net.yacy.cora.protocol.Domains.isLocal(Domains.java:717)
        at net.yacy.cora.protocol.Domains.getDomainID(Domains.java:708)
        at net.yacy.kelondro.data.meta.DigestURI.urlHashComputation(DigestURI.java:130)
        at net.yacy.kelondro.data.meta.DigestURI.hash(DigestURI.java:119)
        at de.anomic.yacy.graphics.WebStructureGraph.generateCitationReference(WebStructureGraph.java:112)
        at de.anomic.search.Switchboard.webStructureAnalysis(Switchboard.java:1881)
        at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at net.yacy.kelondro.workflow.InstantBlockingThread.job(InstantBlockingThread.java:108)
        at net.yacy.kelondro.workflow.AbstractBlockingThread.run(AbstractBlockingThread.java:66)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)
W 2010/10/01 05:25:22 StackTrace null
java.lang.reflect.InvocationTargetException
        at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at net.yacy.kelondro.workflow.InstantBlockingThread.job(InstantBlockingThread.java:108)
        at net.yacy.kelondro.workflow.AbstractBlockingThread.run(AbstractBlockingThread.java:66)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.util.ConcurrentModificationException
        at java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:373)
        at java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:392)
        at java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:391)
        at net.yacy.cora.storage.SimpleARC.getKeys(SimpleARC.java:112)
        at net.yacy.cora.storage.HashARC.getKeys(HashARC.java:27)
        at net.yacy.cora.storage.ConcurrentARC.getKeys(ConcurrentARC.java:117)
        at net.yacy.cora.protocol.Domains.getHostName(Domains.java:467)
        at net.yacy.cora.protocol.Domains.isLocal(Domains.java:731)
        at net.yacy.cora.protocol.Domains.isLocal(Domains.java:739)
        at net.yacy.cora.protocol.Domains.isLocal(Domains.java:717)
        at net.yacy.cora.protocol.Domains.getDomainID(Domains.java:708)
        at net.yacy.kelondro.data.meta.DigestURI.urlHashComputation(DigestURI.java:130)
        at net.yacy.kelondro.data.meta.DigestURI.hash(DigestURI.java:119)
        at de.anomic.yacy.graphics.WebStructureGraph.generateCitationReference(WebStructureGraph.java:112)
        at de.anomic.search.Switchboard.webStructureAnalysis(Switchboard.java:1881)
        ... 11 more
E 2010/10/01 05:25:22 BLOCKINGTHREAD Runtime Error in serverInstantThread.job, thread 'java.lang.reflect.Method.webStructureAnalysis.21': null; target exception: null
java.util.ConcurrentModificationException
        at java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:373)
        at java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:392)
        at java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:391)
        at net.yacy.cora.storage.SimpleARC.getKeys(SimpleARC.java:112)
        at net.yacy.cora.storage.HashARC.getKeys(HashARC.java:27)
        at net.yacy.cora.storage.ConcurrentARC.getKeys(ConcurrentARC.java:117)
        at net.yacy.cora.protocol.Domains.getHostName(Domains.java:467)
        at net.yacy.cora.protocol.Domains.isLocal(Domains.java:731)
        at net.yacy.cora.protocol.Domains.isLocal(Domains.java:739)
        at net.yacy.cora.protocol.Domains.isLocal(Domains.java:717)
        at net.yacy.cora.protocol.Domains.getDomainID(Domains.java:708)
        at net.yacy.kelondro.data.meta.DigestURI.urlHashComputation(DigestURI.java:130)
        at net.yacy.kelondro.data.meta.DigestURI.hash(DigestURI.java:119)
        at de.anomic.yacy.graphics.WebStructureGraph.generateCitationReference(WebStructureGraph.java:112)
        at de.anomic.search.Switchboard.webStructureAnalysis(Switchboard.java:1881)
        at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at net.yacy.kelondro.workflow.InstantBlockingThread.job(InstantBlockingThread.java:108)
        at net.yacy.kelondro.workflow.AbstractBlockingThread.run(AbstractBlockingThread.java:66)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)

Vielleicht reicht es schon aus, die LinkedHashMap gegen eine mit Concurrent auszutauschen.
Quix0r
 
Beiträge: 1345
Registriert: Di Jul 31, 2007 9:22 am
Wohnort: Krefeld

Re: SVN 7160: ConcurrentModificationException und mehr

Beitragvon Quix0r » Fr Okt 01, 2010 5:16 am

Auch in der Bookmark-Verwaltung kam eine:
Code: Alles auswählen
YaCy

request: GET http://localpeer/Bookmarks.html?url=http%3A%2F%2Fwww.asterix.com%2F&title=ASTERIX+-+The+official+website&description=ASTERIX+-+The+official+website&path=%2Funsorted%2C&tags=adventure%2Calbum%2Canimated%2Casterix%2Cbook%2Ccomics%2Ccontest%2Cdrawing%2Cfilm%2Cgame%2Clive-action%2Cmovie%2Cnews%2Cobelix%2Cquiz%2Cvideo%2C&public=public&add=edit

500 Internal Server Error

Unexpected error while processing query.
Session: Session_192.168.1.17:35115#0
Query: /Bookmarks.html
Client: 192.168.1.17
Reason: null

Exception occurred: java.lang.reflect.InvocationTargetException

TRACE:
      java.lang.reflect.InvocationTargetException
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at de.anomic.http.server.HTTPDFileHandler.invokeServlet(HTTPDFileHandler.java:1186)
   at de.anomic.http.server.HTTPDFileHandler.doResponse(HTTPDFileHandler.java:775)
   at de.anomic.http.server.HTTPDFileHandler.doGet(HTTPDFileHandler.java:229)
   at de.anomic.http.server.HTTPDemon.GET(HTTPDemon.java:407)
   at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at de.anomic.server.serverCore$Session.listen(serverCore.java:730)
   at de.anomic.server.serverCore$Session.run(serverCore.java:629)
Caused by: java.util.ConcurrentModificationException
   at java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:373)
   at java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:392)
   at java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:391)
   at net.yacy.cora.storage.SimpleARC.getKeys(SimpleARC.java:112)
   at net.yacy.cora.storage.HashARC.getKeys(HashARC.java:27)
   at net.yacy.cora.storage.ConcurrentARC.getKeys(ConcurrentARC.java:117)
   at net.yacy.cora.protocol.Domains.getHostName(Domains.java:467)
   at net.yacy.cora.protocol.Domains.isLocal(Domains.java:731)
   at net.yacy.cora.protocol.Domains.isLocal(Domains.java:717)
   at net.yacy.cora.protocol.Domains.getDomainID(Domains.java:708)
   at net.yacy.kelondro.data.meta.DigestURI.urlHashComputation(DigestURI.java:130)
   at net.yacy.kelondro.data.meta.DigestURI.hash(DigestURI.java:119)
   at de.anomic.data.bookmarksDB$Bookmark.(bookmarksDB.java:515)
   at de.anomic.data.bookmarksDB.getBookmark(bookmarksDB.java:148)
   at de.anomic.data.bookmarksDB$bookmarkComparator.compare(bookmarksDB.java:719)
   at de.anomic.data.bookmarksDB$bookmarkComparator.compare(bookmarksDB.java:706)
   at java.util.TreeMap.put(TreeMap.java:530)
   at java.util.TreeSet.add(TreeSet.java:238)
   at de.anomic.data.bookmarksDB.getBookmarksIterator(bookmarksDB.java:195)
   at Bookmarks.respond(Bookmarks.java:287)
   ... 13 more

Ich bin gerade mit SixCooler am basteln, das Ergebnis postet er oder ich dann hier. Das Problem wird aber sein, dass die concurrent-Klassen mit den nicht-concurrent inkompatibel sind (kein direktes austauschen moeglich, da z.B. das fuer 'comparator' komplett fehlt).

Hier noch ein interessanter Beitrag:
http://stackoverflow.com/questions/1815 ... ap/1815997

Anbei das Patch. @Orbiter mach bitte daran weiter, es ist schon fast fertig. Es ist DHT-in/out an waehrend indexiert und gecrawlt wird (unter ConfigNetwork_p.html), vielleicht hilft das zum Reproduzieren.
Dateianhänge
concurrent.patch.bz2
SVN 7216: Patch zur Exception
(3.11 KiB) 29-mal heruntergeladen
Quix0r
 
Beiträge: 1345
Registriert: Di Jul 31, 2007 9:22 am
Wohnort: Krefeld

Re: SVN 7160: ConcurrentModificationException und mehr

Beitragvon Quix0r » Mo Okt 04, 2010 5:12 pm

Auch mit 7218 kommt es weiterhin vor:
Code: Alles auswählen
W 2010/10/04 18:10:52 FILEHANDLER Unexpected error while processing query.
Session: Session_90.42.145.6:60934#0
Query:   /yacy/transferURL.html
Client:  90.42.145.6
Reason:  null
java.util.ConcurrentModificationException
        at java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:373)
        at java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:392)
        at java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:391)
        at net.yacy.cora.storage.SimpleARC.getKeys(SimpleARC.java:112)
        at net.yacy.cora.storage.HashARC.getKeys(HashARC.java:27)
        at net.yacy.cora.storage.ConcurrentARC.getKeys(ConcurrentARC.java:117)
        at net.yacy.cora.protocol.Domains.getHostName(Domains.java:467)
        at net.yacy.cora.protocol.Domains.isLocal(Domains.java:731)
        at net.yacy.cora.protocol.Domains.isLocal(Domains.java:739)
        at net.yacy.cora.protocol.Domains.isLocal(Domains.java:717)
        at de.anomic.http.server.HTTPDFileHandler.doResponse(HTTPDFileHandler.java:292)
        at de.anomic.http.server.HTTPDFileHandler.doPost(HTTPDFileHandler.java:235)
        at de.anomic.http.server.HTTPDemon.POST(HTTPDemon.java:540)
        at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at de.anomic.server.serverCore$Session.listen(serverCore.java:730)
        at de.anomic.server.serverCore$Session.run(serverCore.java:629)
Quix0r
 
Beiträge: 1345
Registriert: Di Jul 31, 2007 9:22 am
Wohnort: Krefeld


Zurück zu Fragen und Antworten

Wer ist online?

Mitglieder in diesem Forum: Exabot [Bot] und 2 Gäste

cron