Fixed this . The key point is NEVER invoke cross-server or cross-process service in a for loop . This is not a question to elasticsearch but common programming sutff. Sorry for disturbation. Thanks.
On Tuesday, December 2, 2014 5:55:21 PM UTC+8, nodexy wrote: > > Hi, > > I got this issue when build a basic search service by ElasticSearch in > Java as belown: > > SearchResponse resp = client > .prepareSearch(ElasticSearchManager.INDEX_NAME) > .setTypes(ElasticSearchManager.INDEX_TYPE) > // way 1 > // .setQuery(QueryBuilders.termQuery("pkgName", > // pkgName.toLowerCase())) > // way 2 > .setQuery(QueryBuilders.matchAllQuery()) > .setPostFilter( > FilterBuilders.termFilter("pkgName", > pkgName.toLowerCase())).execute(). > actionGet(); > > > And this method is invoked in a for loop on a list with 20 elements . > > When we run this service in Tomcat container under 500 concurrent thread, > so many threads are waiting like this(TPS is about 1500): > 名称: catalina-exec-15 > 状态: org.elasticsearch.common.util.concurrent.BaseFuture$Sync@23772759上的 > WAITING > 总阻止数: 1,136, 总等待数: 166,545 > > 堆栈跟踪: > sun.misc.Unsafe.park(Native Method) > java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) > java.util.concurrent.locks.AbstractQueuedSynchronizer. > parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:834) > java.util.concurrent.locks.AbstractQueuedSynchronizer. > doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:994) > java.util.concurrent.locks.AbstractQueuedSynchronizer. > acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1303) > org.elasticsearch.common.util.concurrent.BaseFuture$Sync.get(BaseFuture. > java:274) > org.elasticsearch.common.util.concurrent.BaseFuture.get(BaseFuture.java: > 113) > org.elasticsearch.action.support.AdapterActionFuture.actionGet( > AdapterActionFuture.java:45) > com.xxx.service.elastic.ElasticSearchService.getByPkgName( > ElasticSearchService.java:324) > ... ... > > (sorry for the Chinese system language ) > > monitor info from jvisualvm: > > > Notes: > 1. All ElasticsSearch is default . > 2. Another service without for loop is really good , 10000 concurrent with > 5000+ tps . > > So is for loop the real reason ? How should I update this ? > Really thanks for your attention . > > nodexy > -- You received this message because you are subscribed to the Google Groups "elasticsearch" group. To unsubscribe from this group and stop receiving emails from it, send an email to elasticsearch+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/bf1ec0db-434a-42a9-a549-934ca7ba047c%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.