I've been testing concurrent queries, I have just one node in a server (1 * 4 core CPU, 12G memory) and create a index (4 shards, 1 replica). I use 1000 concurrent threads to query(use TransportClient, search condition contains a termFilter and sort in a field). I've found sometimes the testing could be finished, sometimes it cound't, because there are many EsRejectedExecutionException exceptions in ES log file.
Thread pool configuration ::
use routing concept in elasticserach-java-api. based on this entry 0 to n-1
index.number_of_shards: 4
index.number_of_replicas: 1
#Compress the data
index.store.compress.stored: true
Force all memory to be locked, forcing the JVM to never swap
bootstrap.mlockall: true
Threadpool Settings
Search pool
threadpool.search.type: fixed
threadpool.search.size: 40
#threadpool.search.queue_size: 100
Bulk pool
threadpool.bulk.type: fixed
threadpool.bulk.size: 60
#threadpool.bulk.queue_size: 300
Index pool
threadpool.index.type: fixed
threadpool.index.size: 10
#threadpool.index.queue_size: 100
Indices settings
indices.memory.index_buffer_size: 30%
#indices.memory.min_shard_index_buffer_size: 12mb
#indices.memory.min_index_buffer_size: 96mb
Cache Sizes
indices.fielddata.cache.size: 15%
indices.fielddata.cache.expire: 6m
indices.cache.filter.size: 15%
indices.cache.filter.expire: 6m
Indexing Settings for Writes
#index.refresh_interval: 30s
index.translog.flush_threshold_ops: 50000