Thanks for the report Sascha.
So after the hang, it never recovers?  Some amount of hanging could be
visible if there was a commit on the Solr server or something else to
cause the solr requests to block for a while... but it should return
to normal on it's own...

Looking at the stack trace, it looks like threads are blocked waiting
to get an http connection.

I'm traveling all next week, but I'll open a JIRA issue for this now.
Anything that would help us reproduce this is much appreciated.

-Yonik
Apache Lucene Eurocon 2010
18-21 May 2010 | Prague



On Fri, Apr 16, 2010 at 8:57 AM, Sascha Szott <sz...@zib.de> wrote:
> Hi Yonik,
>
> Yonik Seeley wrote:
>>
>> Stephen, were you running stock Solr 1.4, or did you apply any of the
>> SolrJ patches?
>> I'm trying to figure out if anyone still has any problems, or if this
>> was fixed with SOLR-1711:
>
> I'm using the latest trunk version (rev. 934846) and constantly running into
> the same problem. I'm using StreamingUpdateSolrServer with 3 treads and a
> queue size of 20 (not really knowing if this configuration is optimal). My
> multi-threaded application indexes 200k data items (bibliographic metadata
> in Dublin Core format) and constantly hangs after running for some time.
>
> Below you can find the thread dump of one of my index threads (after the app
> hangs all dumps are the same)
>
> "thread 19" prio=10 tid=0x00007fe8c0415800 nid=0x277d waiting on condition
> [0x0000000042d05000]
>   java.lang.Thread.State: WAITING (parking)
>        at sun.misc.Unsafe.park(Native Method)
>        - parking to wait for  <0x00007fe8cdcb7598> (a
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
>        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
>        at
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
>        at
> java.util.concurrent.LinkedBlockingQueue.put(LinkedBlockingQueue.java:254)
>        at
> org.apache.solr.client.solrj.impl.StreamingUpdateSolrServer.request(StreamingUpdateSolrServer.java:216)
>        at
> org.apache.solr.client.solrj.request.AbstractUpdateRequest.process(AbstractUpdateRequest.java:105)
>        at org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:64)
>        at
> de.kobv.ked.index.SolrIndexWriter.addIndexDocument(SolrIndexWriter.java:29)
>        at
> de.kobv.ked.index.SolrIndexWriter.addIndexDocument(SolrIndexWriter.java:10)
>        at
> de.kobv.ked.index.AbstractIndexThread.addIndexDocument(AbstractIndexThread.java:59)
>        at de.kobv.ked.rss.RssThread.indiziere(RssThread.java:30)
>        at de.kobv.ked.rss.RssThread.run(RssThread.java:58)
>
>
>
> and of the three SUSS threads:
>
> "pool-1-thread-3" prio=10 tid=0x00007fe8c7b7f000 nid=0x2780 in Object.wait()
> [0x00000000409ac000]
>   java.lang.Thread.State: WAITING (on object monitor)
>        at java.lang.Object.wait(Native Method)
>        - waiting on <0x00007fe8cdcb6f10> (a
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$ConnectionPool)
>        at
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.doGetConnection(MultiThreadedHttpConnectionManager.java:518)
>        - locked <0x00007fe8cdcb6f10> (a
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$ConnectionPool)
>        at
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.getConnectionWithTimeout(MultiThreadedHttpConnectionManager.java:416)
>        at
> org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:153)
>        at
> org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
>        at
> org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
>        at
> org.apache.solr.client.solrj.impl.StreamingUpdateSolrServer$Runner.run(StreamingUpdateSolrServer.java:153)
>        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)
>
> "pool-1-thread-2" prio=10 tid=0x00007fe8c7afa000 nid=0x277f in Object.wait()
> [0x0000000040209000]
>   java.lang.Thread.State: WAITING (on object monitor)
>        at java.lang.Object.wait(Native Method)
>        - waiting on <0x00007fe8cdcb6f10> (a
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$ConnectionPool)
>        at
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.doGetConnection(MultiThreadedHttpConnectionManager.java:518)
>        - locked <0x00007fe8cdcb6f10> (a
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$ConnectionPool)
>        at
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.getConnectionWithTimeout(MultiThreadedHttpConnectionManager.java:416)
>        at
> org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:153)
>        at
> org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
>        at
> org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
>        at
> org.apache.solr.client.solrj.impl.StreamingUpdateSolrServer$Runner.run(StreamingUpdateSolrServer.java:153)
>        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)
>
> "pool-1-thread-1" prio=10 tid=0x00007fe8c79f2800 nid=0x277e in Object.wait()
> [0x0000000042e06000]
>   java.lang.Thread.State: WAITING (on object monitor)
>        at java.lang.Object.wait(Native Method)
>        - waiting on <0x00007fe8cdcb6f10> (a
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$ConnectionPool)
>        at
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.doGetConnection(MultiThreadedHttpConnectionManager.java:518)
>        - locked <0x00007fe8cdcb6f10> (a
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$ConnectionPool)
>        at
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.getConnectionWithTimeout(MultiThreadedHttpConnectionManager.java:416)
>        at
> org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:153)
>        at
> org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
>        at
> org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
>        at
> org.apache.solr.client.solrj.impl.StreamingUpdateSolrServer$Runner.run(StreamingUpdateSolrServer.java:153)
>        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)
>
>
>
> Do you have any idea how we can fix this issue or, at least, locate the
> error?
>
> Best,
> Sascha
>
>>
>> * SOLR-1711: SolrJ - StreamingUpdateSolrServer had a race condition that
>>   could halt the streaming of documents. (Attila Babo via yonik)
>>
>> Also note that people may want this patch if dealing with i18n:
>>
>> * SOLR-1595: StreamingUpdateSolrServer used the platform default character
>>   set when streaming updates, rather than using UTF-8 as the HTTP headers
>>   indicated, leading to an encoding mismatch. (hossman, yonik)
>>
>>
>> -Yonik
>> Apache Lucene Eurocon 2010
>> 18-21 May 2010 | Prague
>>
>>
>>
>> On Fri, Feb 5, 2010 at 3:20 PM, Stephen Meyer<sme...@library.wisc.edu>
>>  wrote:
>>>
>>> I am trying to use the StreamingUpdateSolrServer to index a bunch of
>>> bibliographic data and it is hanging up every time I run it. Sometimes it
>>> hangs after about 100k records (after about 2 minutes), sometimes after
>>> 4M
>>> records (after about 80 minutes) and all different intervals in between.
>>> It
>>> appears to be the same issue described here:
>>>
>>> https://issues.apache.org/jira/browse/SOLR-1543
>>>
>>> The thread dump (included below) seems to indicate that a lock isn't
>>> being
>>> released because somewhere in the thread chain after adding a
>>> SolrInputDocument.
>>>
>>> Is there some kind of Solr equivalent to closing a session like you do in
>>> an
>>> ORM like Hibernate?
>>>
>>> Thanks,
>>> -Steve
>>> --
>>> Stephen Meyer
>>> Library Application Developer
>>> UW-Madison Libraries
>>> 312F Memorial Library
>>> 728 State St.
>>> Madison, WI 53706
>>>
>>> sme...@library.wisc.edu
>>> 608-265-2844 (ph)
>>>
>>>
>>> "Just don't let the human factor fail to be a factor at all."
>>> - Andrew Bird, "Tables and Chairs"
>>>
>>> Full thread dump Java HotSpot(TM) Client VM (1.5.0_22-147 mixed mode):
>>>
>>> "pool-1-thread-6" prio=5 tid=0x00d26d50 nid=0x1043c00 in Object.wait()
>>> [0xb0e0d000..0xb0e0dd90]
>>>        at java.lang.Object.wait(Native Method)
>>>        - waiting on<0x0bbe29f8>  (a
>>>
>>> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$ConnectionPool)
>>>        at
>>>
>>> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.doGetConnection(MultiThreadedHttpConnectionManager.java:518)
>>>        - locked<0x0bbe29f8>  (a
>>>
>>> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$ConnectionPool)
>>>        at
>>>
>>> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.getConnectionWithTimeout(MultiThreadedHttpConnectionManager.java:416)
>>>        at
>>>
>>> org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:153)
>>>        at
>>>
>>> org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
>>>        at
>>>
>>> org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
>>>        at
>>>
>>> org.apache.solr.client.solrj.impl.StreamingUpdateSolrServer$Runner.run(StreamingUpdateSolrServer.java:153)
>>>        at
>>>
>>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:651)
>>>        at
>>>
>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:676)
>>>        at java.lang.Thread.run(Thread.java:613)
>>>
>>> "pool-1-thread-5" prio=5 tid=0x00d11530 nid=0x1042e00 in Object.wait()
>>> [0xb0d8c000..0xb0d8cd90]
>>>        at java.lang.Object.wait(Native Method)
>>>        - waiting on<0x0bbe29f8>  (a
>>>
>>> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$ConnectionPool)
>>>        at
>>>
>>> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.doGetConnection(MultiThreadedHttpConnectionManager.java:518)
>>>        - locked<0x0bbe29f8>  (a
>>>
>>> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$ConnectionPool)
>>>        at
>>>
>>> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.getConnectionWithTimeout(MultiThreadedHttpConnectionManager.java:416)
>>>        at
>>>
>>> org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:153)
>>>        at
>>>
>>> org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
>>>        at
>>>
>>> org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
>>>        at
>>>
>>> org.apache.solr.client.solrj.impl.StreamingUpdateSolrServer$Runner.run(StreamingUpdateSolrServer.java:153)
>>>        at
>>>
>>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:651)
>>>        at
>>>
>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:676)
>>>        at java.lang.Thread.run(Thread.java:613)
>>>
>>> "MultiThreadedHttpConnectionManager cleanup" daemon prio=5 tid=0x00d13630
>>> nid=0x10fba00 in Object.wait() [0xb0d0b000..0xb0d0bd90]
>>>        at java.lang.Object.wait(Native Method)
>>>        - waiting on<0x0bbb0270>  (a java.lang.ref.ReferenceQueue$Lock)
>>>        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:120)
>>>        - locked<0x0bbb0270>  (a java.lang.ref.ReferenceQueue$Lock)
>>>        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:136)
>>>        at
>>>
>>> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$ReferenceQueueThread.run(MultiThreadedHttpConnectionManager.java:1122)
>>>
>>> "Low Memory Detector" daemon prio=5 tid=0x00d08dc0 nid=0x101ae00 runnable
>>> [0x00000000..0x00000000]
>>>
>>> "CompilerThread0" daemon prio=9 tid=0x00d08450 nid=0x101a000 waiting on
>>> condition [0x00000000..0xb0b077d8]
>>>
>>> "Signal Dispatcher" daemon prio=9 tid=0x00d07f60 nid=0x1015400 waiting on
>>> condition [0x00000000..0x00000000]
>>>
>>> "Finalizer" daemon prio=8 tid=0x00d07690 nid=0x1019200 in Object.wait()
>>> [0xb0a05000..0xb0a05d90]
>>>        at java.lang.Object.wait(Native Method)
>>>        - waiting on<0x0bbb06c0>  (a java.lang.ref.ReferenceQueue$Lock)
>>>        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:120)
>>>        - locked<0x0bbb06c0>  (a java.lang.ref.ReferenceQueue$Lock)
>>>        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:136)
>>>        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)
>>>
>>> "Reference Handler" daemon prio=10 tid=0x00d072b0 nid=0x1017a00 in
>>> Object.wait() [0xb0984000..0xb0984d90]
>>>        at java.lang.Object.wait(Native Method)
>>>        - waiting on<0x0bbb00a0>  (a java.lang.ref.Reference$Lock)
>>>        at java.lang.Object.wait(Object.java:474)
>>>        at
>>> java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
>>>        - locked<0x0bbb00a0>  (a java.lang.ref.Reference$Lock)
>>>
>>> "main" prio=5 tid=0x00d013c0 nid=0xb0801000 waiting on condition
>>> [0xb07ff000..0xb0800188]
>>>        at sun.misc.Unsafe.park(Native Method)
>>>        at
>>> java.util.concurrent.locks.LockSupport.park(LockSupport.java:118)
>>>        at
>>>
>>> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1841)
>>>        at
>>>
>>> java.util.concurrent.LinkedBlockingQueue.put(LinkedBlockingQueue.java:253)
>>>        at
>>>
>>> org.apache.solr.client.solrj.impl.StreamingUpdateSolrServer.request(StreamingUpdateSolrServer.java:216)
>>>        at
>>>
>>> org.apache.solr.client.solrj.request.AbstractUpdateRequest.process(AbstractUpdateRequest.java:105)
>>>        at org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:64)
>>>        at
>>>
>>> edu.wisc.library.sdg.forward.parser.MarcProcessor.nextFeedItemFromThisWeek(MarcProcessor.java:276)
>>>        at
>>>
>>> edu.wisc.library.sdg.forward.parser.MarcProcessor.process(MarcProcessor.java:148)
>>>        at edu.wisc.library.sdg.forward.App.main(App.java:36)
>>>
>>> "VM Thread" prio=9 tid=0x00d06a10 nid=0x1016600 runnable
>>>
>>> "VM Periodic Task Thread" prio=9 tid=0x00d09a40 nid=0x101bc00 waiting on
>>> condition
>>>
>>> "Exception Catcher Thread" prio=10 tid=0x00d015e0 nid=0x100a800 runnable
>>>
>
>

Reply via email to