You def have to use multiple threads with it for it to be fast, but 3 or 4 docs a second still sounds absurdly slow.
- Mark On Mar 15, 2013, at 2:58 PM, Luis Cappa Banda <luisca...@gmail.com> wrote: > And up! :-) > > I´ve been wondering if using CloudSolrServer has something to do here. Does > it have a bad performance when a CloudSolrServer singletong receives > multiple queries? Is it recommended to have a CloudSolrServer instances > list and select one of them with a Round Robin criteria? > > > > 2013/3/14 Luis Cappa Banda <luisca...@gmail.com> > >> Hello! >> >> Thanks a lot, Erick! I've attached some stack traces during a normal >> 'engine' running. >> >> Cheers, >> >> - Luis Cappa >> >> >> 2013/3/13 Erick Erickson <erickerick...@gmail.com> >> >>> Stack traces.. >>> >>> First, >>> jps -l >>> >>> that will give you a the process IDs of your running Java processes. Then: >>> >>> jstack <pid from above> >>> >>> Usually I pipe the output from jstack into a text file... >>> >>> Best >>> Erick >>> >>> >>> On Wed, Mar 13, 2013 at 1:48 PM, Luis Cappa Banda <luisca...@gmail.com >>>> wrote: >>> >>>> Uhm, how can I do that... 'cleanly'? I know that with JConsole it´s >>> posible >>>> to output this traces, but with a .war application built on top of >>> Spring I >>>> don´t know how can I do that. In any case, here is my CloudSolrServer >>>> wrapper that is used by other classes. There is no sync method or piece >>> of >>>> code: >>>> >>>> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - >>> - - >>>> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - >>>> >>>> *public class BinaryLBHttpSolrServer extends LBHttpSolrServer {* >>>> >>>> private static final long serialVersionUID = 3905956120804659445L; >>>> public BinaryLBHttpSolrServer(String[] endpoints) throws >>>> MalformedURLException { >>>> super(endpoints); >>>> } >>>> >>>> @Override >>>> protected HttpSolrServer makeServer(String server) throws >>>> MalformedURLException { >>>> HttpSolrServer solrServer = super.makeServer(server); >>>> solrServer.setRequestWriter(new BinaryRequestWriter()); >>>> return solrServer; >>>> } >>>> } >>>> >>>> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - >>> - - >>>> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - >>>> >>>> *public class CloudSolrHttpServerImpl implements CloudSolrHttpServer {* >>>> private CloudSolrServer cloudSolrServer; >>>> >>>> private Logger log = Logger.getLogger(CloudSolrHttpServerImpl.class); >>>> >>>> public CloudSolrHttpServerImpl(String zookeeperEndpoints, String[] >>>> endpoints, int clientTimeout, >>>> int connectTimeout, String cloudCollection) { >>>> try { >>>> BinaryLBHttpSolrServer lbSolrServer = new *BinaryLBHttpSolrServer* >>>> (endpoints); >>>> this.cloudSolrServer = new CloudSolrServer(zookeeperEndpoints, >>>> lbSolrServer); >>>> this.cloudSolrServer.setZkConnectTimeout(connectTimeout); >>>> this.cloudSolrServer.setZkClientTimeout(clientTimeout); >>>> this.cloudSolrServer.setDefaultCollection(cloudCollection); >>>> } catch (MalformedURLException e) { >>>> log.error(e); >>>> } >>>> } >>>> >>>> @Override >>>> public QueryResponse *search*(SolrQuery query) throws >>> SolrServerException { >>>> return cloudSolrServer.query(query, METHOD.POST); >>>> } >>>> >>>> @Override >>>> public boolean *index*(DocumentBean user) { >>>> boolean indexed = false; >>>> int retries = 0; >>>> do { >>>> indexed = addBean(user); >>>> retries++; >>>> } while(!indexed && retries<4); >>>> return indexed; >>>> } >>>> @Override >>>> public boolean *update*(SolrInputDocument updateDoc) { >>>> boolean update = false; >>>> int retries = 0; >>>> >>>> do { >>>> update = addSolrInputDocument(updateDoc); >>>> retries++; >>>> } while(!update && retries<4); >>>> return update; >>>> } >>>> @Override >>>> public void commit() { >>>> try { >>>> cloudSolrServer.commit(); >>>> } catch (SolrServerException e) { >>>> log.error(e); >>>> } catch (IOException e) { >>>> log.error(e); >>>> } >>>> } >>>> >>>> @Override >>>> public boolean *delete*(String ... ids) { >>>> boolean deleted = false; >>>> List<String> idList = Arrays.asList(ids); >>>> try { >>>> this.cloudSolrServer.deleteById(idList); >>>> this.cloudSolrServer.commit(true, true); >>>> deleted = true; >>>> >>>> } catch (SolrServerException e) { >>>> log.error(e); >>>> >>>> } catch (IOException e) { >>>> log.error(e); >>>> } >>>> return deleted; >>>> } >>>> >>>> @Override >>>> public void *optimize*() { >>>> try { >>>> this.cloudSolrServer.optimize(); >>>> } catch (SolrServerException e) { >>>> log.error(e); >>>> } catch (IOException e) { >>>> log.error(e); >>>> } >>>> } >>>> /* >>>> * ******************** >>>> * Getters & setters * >>>> * ******************** >>>> * */ >>>> public CloudSolrServer getSolrServer() { >>>> return cloudSolrServer; >>>> } >>>> >>>> public void setSolrServer(CloudSolrServer solrServer) { >>>> this.cloudSolrServer = solrServer; >>>> } >>>> >>>> private boolean addBean(DocumentBean user) { >>>> boolean added = false; >>>> try { >>>> this.cloudSolrServer.addBean(user, 100); >>>> this.commit(); >>>> >>>> } catch (IOException e) { >>>> log.error(e); >>>> >>>> } catch (SolrServerException e) { >>>> log.error(e); >>>> }catch(SolrException e) { >>>> log.error(e); >>>> } >>>> return added; >>>> } >>>> private boolean addSolrInputDocument(SolrInputDocument updateDoc) { >>>> boolean added = false; >>>> try { >>>> this.cloudSolrServer.add(updateDoc, 100); >>>> this.commit(); >>>> added = true; >>>> } catch (IOException e) { >>>> log.error(e); >>>> >>>> } catch (SolrServerException e) { >>>> log.error(e); >>>> }catch(SolrException e) { >>>> log.error(e); >>>> } >>>> return added; >>>> } >>>> } >>>> >>>> Thank you very much, Mark. >>>> >>>> >>>> - Luis Cappa >>>> >>>> >>>> >>>> And >>>> 2013/3/13 Mark Miller <markrmil...@gmail.com> >>>> >>>>> >>>>> Could you capture some thread stack traces in the 'engine' and see if >>>>> there are any blocking methods? >>>>> >>>>> - Mark >>>>> >>>>> On Mar 13, 2013, at 1:34 PM, Luis Cappa Banda <luisca...@gmail.com> >>>> wrote: >>>>> >>>>>> Just one correction: >>>>>> >>>>>> When I said: >>>>>> >>>>>> - I´ve checked SolrCloud via Solr Admin interface and it´s OK: >>>>>> everything is green, and I cant execute queries directly into >>> Solr. >>>>>> >>>>>> I mean: >>>>>> >>>>>> >>>>>> - I´ve checked SolrCloud via Solr Admin interface and it´s OK: >>>>>> everything is green, and *I can* execute queries directly into >>> Solr. >>>>>> >>>>>> >>>>>> Thanks! >>>>>> >>>>>> >>>>>> - Luis Cappa >>>>>> >>>>>> >>>>>> 2013/3/13 Luis Cappa Banda <luisca...@gmail.com> >>>>>> >>>>>>> Hello, guys! >>>>>>> >>>>>>> I´ve been experiencing some annoying behavior with my current >>>> production >>>>>>> scenario. Here is the snapshot: >>>>>>> >>>>>>> >>>>>>> - SolrCloud: 2 shards >>>>>>> - Zookeeper ensemble: 3 nodes in *different machines *(most of >>> the >>>>>>> tutorials installs 3 Zookeeper nodes in the same machine). >>>>>>> - This is the zoo.cfg from every >>>>>>> >>>>>>> tickTime=2000 // I´ve also tried with 60000 >>>>>>> >>>>>>> initLimit=10 >>>>>>> >>>>>>> syncLimit=5 >>>>>>> >>>>>>> dataDir=/var/lib/zookeeper >>>>>>> >>>>>>> clientPort=9000 >>>>>>> >>>>>>> server.1=zoohost1:2888:3888 >>>>>>> >>>>>>> server.2=zoohost1:2888:3888 >>>>>>> >>>>>>> server.3=zoohost1:2888:3888 >>>>>>> >>>>>>> >>>>>>> >>>>>>> - I´ve developed a Java Application with a REST API (let´s call >>> it * >>>>>>> engine*) that dispatches queries into SolrCloud. It´s a wrapper >>>> around >>>>>>> CloudSolrServer, so it´s mandatory to specify some Zookeeper >>>>> configuration >>>>>>> params too. They are loaded dynamically when the application is >>>>> deployed in >>>>>>> a Tomcat server, but the current values that I´m using are as >>>> follows: >>>>>>> >>>>>>> cloudSolrServer.*setZkConnectTimeout(60000)* >>>>>>> >>>>>>> cloudSolrServer.*setZkClientTimeout(60000)* >>>>>>> * >>>>>>> * >>>>>>> * >>>>>>> * >>>>>>> >>>>>>> *THE PROBLEM* >>>>>>> * >>>>>>> * >>>>>>> Everything goes OK, but after two days more or less (yes, I´ve >>> checked >>>>>>> that this behavior occurrs periodically, more or less) the *engine >>>>> blocks >>>>>>> * and cannot dispatch any query to SolrCloud. >>>>>>> >>>>>>> - The *engine *log only outputs "updating Zookeeper..." one last >>>> time, >>>>>>> but never updates. >>>>>>> - I´ve checked SolrCloud via Solr Admin interface and it´s OK: >>>>>>> everything is green, and I cant execute queries directly into >>> Solr. >>>>>>> - So then Solr appears to be OK, so the next step is to restart >>>>> *engine >>>>>>> but *it again appears "updating Zookeeper...". Unfortunately >>> switch >>>>>>> off + switch on doesn´t work here, :-( >>>>>>> - I´ve checked too Zookeeper logs and it appears some connection >>> log >>>>>>> outs, but the ensemble appears to be OK too. >>>>>>> - *The end: *If I restart Zookeeper one by one, and I restart >>>>>>> SolrCloud, plus I restart the engine, the problem is solved. I´m >>>> using >>>>>>> Amazon AWS as hostage, so I discard connection problems between >>>>> instances. >>>>>>> >>>>>>> >>>>>>> Does anyone experienced something similar? Can anybody shed some >>> light >>>>> on >>>>>>> this problem? >>>>>>> >>>>>>> Thank you very much. >>>>>>> >>>>>>> >>>>>>> Regards, >>>>>>> >>>>>>> >>>>>>> - Luis Cappa >>>>>>> >>>>> >>>>> >>>> >>> >> >>