> Besides, I don't know how you'd stop Solr processing a query mid-way > through, > I don't know of any way to make that happen. The timeAllowed parameter causes a timeout in the Solr server to kill the searching thread. They uses that now.
But, yes, Erick is right- there is a fundamental problem you should solve. Since they are all stuck in returning XML results, there is something wrong in reading back results. It is possible that there is a bug in timeAllowed, where the kill-this-thread hits while returning the results and the handler for this does not work correctly when returning results. It would be great if someone wrote a unit test for this (not me) and posted it. On Mon, Nov 1, 2010 at 8:44 AM, Erick Erickson <erickerick...@gmail.com> wrote: > I'm going to nudge you in the direction of understanding why the queries > take so long in the first place rather than going toward the blunt approach > of cutting them off after some time. The fact that you don't control the > queries submitted doesn't prevent you from trying to understand what > is taking so long. > > The first thing I'd look for is whether the system is memory starved. What > JVM are you using and what memory parameters are you giving it? What > version of Solr are you using? Have you tried any performance monitoring > to determine what is happening? > > The reason I'm pushing in this direction is that 5 minute searches are > pathological. Once you're up in that range, virtually any fix you come up > with will simply mask the underlying problems, and you'll be forever > chasing the next manifestation of the underlying problem. > > Besides, I don't know how you'd stop Solr processing a query mid-way > through, > I don't know of any way to make that happen. > > Best > Erick > > On Mon, Nov 1, 2010 at 9:30 AM, Roxana Angheluta <anghelu...@yahoo.com>wrote: > >> Hi, >> >> Yes, sometimes it takes >5 minutes for a query. I agree this is not >> desirable. However, if the application has no control over the input queries >> other that closing the socket after a while, solr should not continue >> writing the response, but terminate the thread. >> >> In general, is there a way to quantify the complexity of a given query on a >> certain index? Some general guidelines which can be used by non-technical >> people? >> >> Thanks a lot, >> roxana >> >> --- On Sun, 10/31/10, Erick Erickson <erickerick...@gmail.com> wrote: >> >> > From: Erick Erickson <erickerick...@gmail.com> >> > Subject: Re: solr stuck in writing to inexisting sockets >> > To: solr-user@lucene.apache.org >> > Date: Sunday, October 31, 2010, 2:29 AM >> > Are you saying that your Solr server >> > is at times taking 5 minutes to >> > complete? If so, >> > I'd get to the bottom of that first off. My first guess >> > would be you're >> > either hitting >> > memory issues and swapping horribly or..well, that would be >> > my first guess. >> > >> > Best >> > Erick >> > >> > On Thu, Oct 28, 2010 at 5:23 AM, Roxana Angheluta <anghelu...@yahoo.com >> >wrote: >> > >> > > Hi all, >> > > >> > > We are using Solr over Jetty with a large index, >> > sharded and distributed >> > > over multiple machines. Our queries are quite long, >> > involving boolean and >> > > proximity operators. We cut the connection at the >> > client side after 5 >> > > minutes. Also, we are using parameter timeAllowed to >> > stop executing it on >> > > the server after a while. >> > > We quite often run into situations when solr "blocks". >> > The load on the >> > > server increases and a thread dump on the solr process >> > shows many threads >> > > like below: >> > > >> > > >> > > "btpool0-49" prio=10 tid=0x00007f73afe1d000 nid=0x3581 >> > runnable >> > > [0x00000000451a0000] >> > > java.lang.Thread.State: RUNNABLE >> > > at >> > java.io.PrintWriter.write(PrintWriter.java:362) >> > > at >> > org.apache.solr.common.util.XML.escape(XML.java:206) >> > > at >> > org.apache.solr.common.util.XML.escapeCharData(XML.java:79) >> > > at >> > org.apache.solr.request.XMLWriter.writePrim(XMLWriter.java:832) >> > > at >> > org.apache.solr.request.XMLWriter.writeStr(XMLWriter.java:684) >> > > at >> > org.apache.solr.request.XMLWriter.writeVal(XMLWriter.java:564) >> > > at >> > org.apache.solr.request.XMLWriter.writeDoc(XMLWriter.java:435) >> > > at >> > org.apache.solr.request.XMLWriter$2.writeDocs(XMLWriter.java:514) >> > > at >> > > >> > org.apache.solr.request.XMLWriter.writeDocuments(XMLWriter.java:485) >> > > at >> > > >> > >> org.apache.solr.request.XMLWriter.writeSolrDocumentList(XMLWriter.java:494) >> > > at >> > org.apache.solr.request.XMLWriter.writeVal(XMLWriter.java:588) >> > > at >> > > >> > org.apache.solr.request.XMLWriter.writeResponse(XMLWriter.java:130) >> > > at >> > > >> > >> org.apache.solr.request.XMLResponseWriter.write(XMLResponseWriter.java:34) >> > > at >> > > >> > >> org.apache.solr.servlet.SolrDispatchFilter.writeResponse(SolrDispatchFilter.java:325) >> > > at >> > > >> > >> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:254) >> > > at >> > > >> > >> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089) >> > > at >> > > >> > org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365) >> > > at >> > > >> > >> org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) >> > > at >> > > >> > org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) >> > > at >> > > >> > org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712) >> > > ...................................... >> > > >> > > >> > > A netstat on the machine shows sockets in state >> > CLOSE_WAIT. However, they >> > > are fewer than the number of RUNNABLE threads as the >> > above. >> > > >> > > Why is this happening? Is there anything we can do to >> > avoid getting in >> > > these situations? >> > > >> > > Thanks, >> > > roxana >> > > >> > > >> > > >> > > >> > >> >> >> >> > -- Lance Norskog goks...@gmail.com