How are you triggering an infinite loop in your requests to Solr?

        Erik

On Sep 19, 2012, at 11:12 , Mike Gagnon wrote:

> [ I am sorry for breaking the thread, but my inbox has neither received my
> original post to the mailing list, nor Otis's response (so I can't reply to
> his response) ]
> 
> Thanks a bunch for your response Otis.  Let me more thoroughly explain my
> experimental workload and why I am surprised Solr works so well.
> 
> The most important characteristic of my workload is that many of the
> requests (60 per second) cause infinite loops within Solr. That is, each of
> those requests causes a separate infinite loop within it's request context.
> 
> This workload is similar to an algorithmic-complexity attack --- a type of
> DoS.  In every web-app stack I've tested (except Solr/Jetty and
> Solr/Tomcat) such workloads cause an immediate and complete denial of
> service. What happens for these vulnerable applications, is that the thread
> pool fills up with infinite loops, and incoming requests become rejected.
> 
> But Solr manages to survive such an attack. My best guess is that Solr has
> an especially good overload strategy that quickly kicks out the infinite
> loop requests -- which lowers CPU contention, and allows other requests to
> be admitted.
> 
> My first guess would be that Tomcat or Jetty is responsible for the good
> response to overload. However,
> there was a good discussion in 2008 on this mailing list about Solr
> Security:
> http://mail-archives.apache.org/mod_mbox/lucene-solr-user/200811.mbox/browser
> 
> In this discuss Walter Underwood commented: "We have protected against
> several different DoS problems in our front-end code."
> 
> Perhaps it is these front-end defenses that help Solr survive my workloads?
> 
> Thanks!
> Mike Gagnon
> 
> 
>> Hm, I'm not sure how to approach this. Solr is not alone here - there's
>> container like jetty, solr inside it and lucene inside solr.
>> Next, that index is reeeeally small, so there is no disk IO. The request
>> rate is also not super high and if you did this over a fast connection
> then
>> there are also no issues with slow response writing or with having lots of
>> concurrent connections or running out of threads ...
>> 
>> ...so it's not really that surprising solr keeps working :)
>> 
>> But...tell us more.
>> 
>> Otis
>> --
>> Performance Monitoring - http://sematext.com/spm
>> 
>> 
>> 
>> On Sep 12, 2012 8:51 PM, "Mike Gagnon" <mikegag...@gmail.com> wrote:
>> 
>> Hi,
>> 
>> I have been studying how server software responds to requests that cause
>> CPU overloads (such as infinite loops).
>> 
>> In my experiments I have observed that Solr performs unusually well when
>> subjected to such loads. Every other piece of web software I've
>> experimented with drops to zero service under such loads. Do you know how
>> Solr achieves such good performance? I am guessing that when Solr is
>> overload sheds load to make room for incoming requests, but I could not
>> find any documentation that describes Solr's overload strategy.
>> 
>> Experimental setup: I ran Solr 3.1 on a 12-core machine with 12 GB ram,
>> using it index and search about 10,000 pages on MediaWiki. I test both
>> Solr+Jetty and Solr+Tomcat. I submitted a variety of Solr queries at a
> rate
>> of 300 requests per second. At the same time, I submitted "overload
>> requests" at a rate of 60 requests per second. Each overload request
> caused
>> an infinite loop in Solr via
>> https://issues.apache.org/jira/browse/SOLR-2631.
>> 
>> With Jetty about 70% of non-overload requests completed --- 95% of
> requests
>> completing within 0.6 seconds.
>> With Tomcat about 34% of non-overload requests completed --- 95% of
>> requests completing within 0.6 seconds.
>> 
>> I also ran Solr+Jetty with non-overload requests coming in 65 requests per
>> second (overload requests remain at 60 requests per second). In this
>> workload, the completion rate drops to 15% and the 95th percentile latency
>> increases to 25.
>> 
>> Cheers,
>> Mike Gagnon
>> 

Reply via email to