Hmm.. About <1>: Yep, GC is one of the "more art than science" bits of Java/Solr. Siiiggggh.
About <2>: that's what autowarming is about. Particularly the filterCache and queryResultCache. My guess is that you have the autowarm count on those two caches set to zero. Try setting it to some modest number like 16 or 32. The whole _point_ of those parameters is to smooth out these kinds of spikes. Additionally, the newSearcher event (also in solrconfig.xml) is explicitly intended to allow you to hard-code queries that fill the internal caches as well as the mmap OS memory from disk, people include facets, sorts and the like in that event. It's fired every time a new searcher is opened (i.e. whenever you commit and open a new searcher)... FirstSearcher is for restarts. The difference is that newSearcher presumes Solr has been running for a while and the autowarm counts have something to work from. OTOH, when you start Solr there's no history to autowarm so firstSeracher can be quite a bit more complex than newSearcher. Practically, most people just copy newSearcher into firstSearcher on the assumption that restarting Solr is pretty rare..... about <3> MMap stuff will be controlled by the OS I think. I actually worked with a much more primitive system at one point that would be dog-slow during off-hours. Someone wrote an equivalent of a cron job to tickle the app upon occasion to prevent periodic slowness..... for a nauseating set of details about hard and soft commits, see: https://lucidworks.com/blog/2013/08/23/understanding-transaction-logs-softcommit-and-commit-in-sorlcloud/ Best, Erick On Sat, Sep 24, 2016 at 11:35 AM, Rallavagu <rallav...@gmail.com> wrote: > > > On 9/22/16 5:59 AM, Shawn Heisey wrote: >> >> On 9/22/2016 5:46 AM, Muhammad Zahid Iqbal wrote: >>> >>> Did you find any solution to slow searches? As far as I know jetty >>> container default configuration is bit slow for large production >>> environment. >> >> >> This might be true for the default configuration that comes with a >> completely stock jetty downloaded from eclipse.org, but the jetty >> configuration that *Solr* ships with is adequate for just about any Solr >> installation. The Solr configuration may require adjustment as the >> query load increases, but the jetty configuration usually doesn't. >> >> Thanks, >> Shawn >> > > It turned out to be a "sequence of performance testing sessions" in order to > locate slowness. Though I am not completely done with it, here are my > finding so far. We are using NRT configuration (warm up count to 0 for > caches and NRTCachingDirectoryFactory for index directory) > > 1. Essentially, solr searches (particularly with edismax and relevance) > generate lot of "garbage" that makes GC activity to kick in more often. This > becomes even more when facets are included. This has huge impact on QTimes > (I have 12g heap and configured 6g to NewSize). > > 2. After a fresh restart (or core reload) when searches are performed, Solr > would initially "populate" mmap entries and this is adding to total QTimes > (I have made sure that index files are cached at filesystem layer using > vmtouch - https://hoytech.com/vmtouch). When run the same test again with > mmap entries populated from previous tests, it shows improved QTimes > relative to previous test. > > 3. Seems the populated mmap entries are flushed away after certain idle time > (not sure if it is controlled by Solr or underlying OS). This will make > subsequent searches to fetch from "disk" (even though the disk items are > cached by OS). > > So, what I am gonna try next is to tune the field(s) for facets to reduce > the index size if possible. Though I am not sure, if it will have impact but > would attempt to change the "caches" even though they will be invalidated > after a softCommit (every 10 minutes in my case). > > Any other tips/clues/suggestions are welcome. Thanks. >