---
type: api
title: Get thread pool statistics
description: **All methods and paths for this operation:**
url: https://www.elastic.co/elastic/docs-builder/docs/4493/api/doc/elasticsearch/operation/operation-cat-thread-pool
resource: https://www.elastic.co/elastic/docs-builder/docs/4493/api/doc/elasticsearch/operation/operation-cat-thread-pool
products:
  - Elasticsearch
---

# Get thread pool statistics


## Paths

- `GET` `/_cat/thread_pool/{thread_pool_patterns}`
- `GET` `/_cat/thread_pool`

#### Path parameters

- `thread_pool_patterns` (union string | string[]) — optional, leave it out to use `/_cat/thread_pool`
  A comma-separated list of thread pool names used to limit the request.
Accepts wildcard expressions.

## Description

Get thread pool statistics for each node in a cluster.
Returned information includes all built-in thread pools and custom thread pools.
IMPORTANT: cat APIs are only intended for human consumption using the command line or Kibana console. They are not intended for use by applications. For application consumption, use the nodes info API.

## Required authorization

- Cluster privileges: `monitor`

## Authentication

- Api key: `Authorization: <value>`
  Elasticsearch APIs support key-based authentication.
  You must create an API key and use the encoded value in the request header.
  For example:
  
  
  ```
  curl -X GET "${ES_URL}/_cat/indices?v=true" \
    -H "Authorization: ApiKey ${API_KEY}"
  ```
  
  To get API keys, use the `/_security/api_key` APIs.
- Basic: `Authorization: Basic <credentials>`
- Bearer: `Authorization: Bearer <token>`
  Elasticsearch APIs support the use of bearer tokens in the `Authorization` HTTP header to authenticate with the API.
  For examples, refer to [Token-based authentication services](https://www.elastic.co/docs/deploy-manage/users-roles/cluster-or-deployment-auth/token-based-authentication-services)

## Query string parameters

- `h` (union oneOf) — optional
  List of columns to appear in the response. Supports simple wildcards.

Supported values include:
  - `active` (or `a`): Number of active threads in the current thread pool.
  - `completed` (or `c`): Number of tasks completed by the thread pool executor.
  - `core` (or `cr`): Configured core number of active threads allowed in the current thread pool.
  - `ephemeral_id` (or `eid`): Ephemeral node ID.
  - `host` (or `h`): Hostname for the current node.
  - `ip` (or `i`): IP address for the current node.
  - `keep_alive` (or `k`): Configured keep alive time for threads.
  - `largest` (or `l`): Highest number of active threads in the current thread pool.
  - `max` (or `mx`): Configured maximum number of active threads allowed in the current thread pool.
  - `name`: Name of the thread pool, such as `analyze` or `generic`.
  - `node_id` (or `id`): ID of the node, such as `k0zy`.
  - `node_name`: Node name, such as `I8hydUG`.
  - `pid` (or `p`): Process ID of the running node.
  - `pool_size` (or `psz`): Number of threads in the current thread pool.
  - `port` (or `po`): Bound transport port for the current node.
  - `queue` (or `q`): Number of tasks in the queue for the current thread pool.
  - `queue_size` (or `qs`): Maximum number of tasks permitted in the queue for the current thread pool.
  - `rejected` (or `r`): Number of tasks rejected by the thread pool executor.
  - `size` (or `sz`): Configured fixed number of active threads allowed in the current thread pool.
  - `type` (or `t`): Type of thread pool. Returned values are `fixed`, `fixed_auto_queue_size`, `direct`, or `scaling`.
  Values: `active`, `a`, `completed`, `c`, `core`, `cr`, `ephemeral_id`, `eid`, `host`, `h`, `ip`, `i`, `keep_alive`, `k`, `largest`, `l`, `max`, `mx`, `name`, `node_id`, `id`, `node_name`, `pid`, `p`, `pool_size`, `psz`, `port`, `po`, `queue`, `q`, `queue_size`, `qs`, `rejected`, `r`, `size`, `sz`, `type`, `t`
- `s` (union oneOf) — optional
  A comma-separated list of column names or aliases that determines the sort order.
Sorting defaults to ascending and can be changed by setting `:asc`
or `:desc` as a suffix to the column name.
  One of: `string[]` or `string`
- `local` (boolean · default: false) — optional
  If `true`, the request computes the list of selected nodes from the
local cluster state. If `false` the list of selected nodes are computed
from the cluster state of the master node. In both cases the coordinating
node will send requests for further information to each selected node.
- `master_timeout` (string · default: 30s) — optional
  The period to wait for a connection to the master node.
- `format` (string · default: text) — optional
  Specifies the format to return the columnar data in, can be set to
`text`, `json`, `cbor`, `yaml`, or `smile`.
- `help` (boolean · default: false) — optional
  When set to `true` will output available columns. This option
can't be combined with any other query string option.
- `v` (boolean · default: false) — optional
  When set to `true` will enable verbose output.
- `bytes` (enum) — optional
  Sets the units for columns that contain a byte-size value.
Note that byte-size value units work in terms of powers of 1024. For instance `1kb` means 1024 bytes, not 1000 bytes.
If omitted, byte-size values are rendered with a suffix such as `kb`, `mb`, or `gb`, chosen such that the numeric value of the column is as small as possible whilst still being at least `1.0`.
If given, byte-size values are rendered as an integer with no suffix, representing the value of the column in the chosen unit.
Values that are not an exact multiple of the chosen unit are rounded down.
  Values: `b`, `kb`, `mb`, `gb`, `tb`, `pb`
- `time` (enum) — optional
  Sets the units for columns that contain a time duration.
If omitted, time duration values are rendered with a suffix such as `ms`, `s`, `m` or `h`, chosen such that the numeric value of the column is as small as possible whilst still being at least `1.0`.
If given, time duration values are rendered as an integer with no suffix.
Values that are not an exact multiple of the chosen unit are rounded down.
  Values: `nanos`, `micros`, `ms`, `s`, `m`, `h`, `d`

## Response

`application/json`

Type: `object[]`

An array; each item has these fields:

- `node_name` (string)
  The node name.
- `node_id` (string)
  The persistent node identifier.
- `ephemeral_node_id` (string)
  The ephemeral node identifier.
- `pid` (string)
  The process identifier.
- `host` (string)
  The host name for the current node.
- `ip` (string)
  The IP address for the current node.
- `port` (string)
  The bound transport port for the current node.
- `name` (string)
  The thread pool name.
- `type` (string)
  The thread pool type.
Returned values include `fixed`, `fixed_auto_queue_size`, `direct`, and `scaling`.
- `active` (string)
  The number of active threads in the current thread pool.
- `pool_size` (string)
  The number of threads in the current thread pool.
- `queue` (string)
  The number of tasks currently in queue.
- `queue_size` (string)
  The maximum number of tasks permitted in the queue.
- `rejected` (string)
  The number of rejected tasks.
- `largest` (string)
  The highest number of active threads in the current thread pool.
- `completed` (string)
  The number of completed tasks.
- `core` (union string) — nullable
  The core number of active threads allowed in a scaling thread pool.
  One of: `string`
- `max` (union string) — nullable
  The maximum number of active threads allowed in a scaling thread pool.
  One of: `string`
- `size` (union string) — nullable
  The number of active threads allowed in a fixed thread pool.
  One of: `string`
- `keep_alive` (union string) — nullable
  The thread keep alive time.
  One of: `string`
## Code examples

#### Console

```console
GET /_cat/thread_pool?format=json
```

#### JavaScript

```javascript
const response = await client.cat.threadPool({
  format: "json",
});
```

#### Python

```python
resp = client.cat.thread_pool(
    format="json",
)
```

#### curl

```curl
curl -X GET "$ELASTICSEARCH_URL/_cat/thread_pool?format=json" \
  -H "Authorization: ApiKey $ELASTIC_API_KEY"
```

#### Java

```java
client.cat().threadPool(t -> t);
```

#### PHP

```php
$resp = $client->cat()->threadPool([
    "format" => "json",
]);
```

#### Ruby

```ruby
response = client.cat.thread_pool(
  format: "json"
)
```

## Response examples

#### Default columns

A successful response from `GET /_cat/thread_pool?format=json`.

```json
[
  {
    "node_name": "node-0",
    "name": "analyze",
    "active": "0",
    "queue": "0",
    "rejected": "0"
  },
  {
    "node_name": "node-0",
    "name": "fetch_shard_started",
    "active": "0",
    "queue": "0",
    "rejected": "0"
  },
  {
    "node_name": "node-0",
    "name": "fetch_shard_store",
    "active": "0",
    "queue": "0",
    "rejected": "0"
  },
  {
    "node_name": "node-0",
    "name": "flush",
    "active": "0",
    "queue": "0",
    "rejected": "0"
  },
  {
    "node_name": "node-0",
    "name": "write",
    "active": "0",
    "queue": "0",
    "rejected": "0"
  }
]
```

#### Explicit columns

A successful response from `GET /_cat/thread_pool/generic?v=true&h=id,name,active,rejected,completed&format=json`. It returns the `id`, `name`, `active`, `rejected`, and `completed` columns. It also limits returned information to the generic thread pool.

```json
[
  {
    "id": "0EWUhXeBQtaVGlexUeVwMg",
    "name": "generic",
    "active": "0",
    "rejected": "0",
    "completed": "70"
  }
]
```

