123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- [[modules-threadpool]]
- == Thread Pool
- A node holds several thread pools in order to improve how threads memory consumption
- are managed within a node. Many of these pools also have queues associated with them,
- which allow pending requests to be held instead
- of discarded.
- There are several thread pools, but the important ones include:
- `generic`::
- For generic operations (e.g., background node discovery).
- Thread pool type is `scaling`.
- `index`::
- For index/delete operations. Thread pool type is `fixed`
- with a size of `# of available processors`,
- queue_size of `200`.
- `search`::
- For count/search/suggest operations. Thread pool type is `fixed`
- with a size of `int((# of available_processors * 3) / 2) + 1`,
- queue_size of `1000`.
- `get`::
- For get operations. Thread pool type is `fixed`
- with a size of `# of available processors`,
- queue_size of `1000`.
- `bulk`::
- For bulk operations. Thread pool type is `fixed`
- with a size of `# of available processors`,
- queue_size of `50`.
- `percolate`::
- For percolate operations. Thread pool type is `fixed`
- with a size of `# of available processors`,
- queue_size of `1000`.
- `snapshot`::
- For snapshot/restore operations. Thread pool type is `scaling` with a
- keep-alive of `5m` and a size of `min(5, (# of available processors)/2)`.
- `warmer`::
- For segment warm-up operations. Thread pool type is `scaling` with a
- keep-alive of `5m` and a size of `min(5, (# of available processors)/2)`.
- `refresh`::
- For refresh operations. Thread pool type is `scaling` with a
- keep-alive of `5m` and a size of `min(10, (# of available processors)/2)`.
- `listener`::
- Mainly for java client executing of action when listener threaded is set to true.
- Thread pool type is `scaling` with a default size of `min(10, (# of available processors)/2)`.
- Changing a specific thread pool can be done by setting its type-specific parameters; for example, changing the `index`
- thread pool to have more threads:
- [source,js]
- --------------------------------------------------
- threadpool:
- index:
- size: 30
- --------------------------------------------------
- NOTE: you can update thread pool settings dynamically using <<cluster-update-settings>>.
- [float]
- [[types]]
- === Thread pool types
- The following are the types of thread pools and their respective parameters:
- [float]
- ==== `fixed`
- The `fixed` thread pool holds a fixed size of threads to handle the
- requests with a queue (optionally bounded) for pending requests that
- have no threads to service them.
- The `size` parameter controls the number of threads, and defaults to the
- number of cores times 5.
- The `queue_size` allows to control the size of the queue of pending
- requests that have no threads to execute them. By default, it is set to
- `-1` which means its unbounded. When a request comes in and the queue is
- full, it will abort the request.
- [source,js]
- --------------------------------------------------
- threadpool:
- index:
- size: 30
- queue_size: 1000
- --------------------------------------------------
- [float]
- ==== `scaling`
- The `scaling` thread pool holds a dynamic number of threads. This
- number is proportional to the workload and varies between the value of
- the `min` and `size` parameters.
- The `keep_alive` parameter determines how long a thread should be kept
- around in the thread pool without it doing any work.
- [source,js]
- --------------------------------------------------
- threadpool:
- warmer:
- min: 1
- size: 8
- keep_alive: 2m
- --------------------------------------------------
- [float]
- [[processors]]
- === Processors setting
- The number of processors is automatically detected, and the thread pool
- settings are automatically set based on it. Sometimes, the number of processors
- are wrongly detected, in such cases, the number of processors can be
- explicitly set using the `processors` setting.
- In order to check the number of processors detected, use the nodes info
- API with the `os` flag.
|