[[high-cpu-usage]] === High CPU usage {es} uses <> to manage CPU resources for concurrent operations. High CPU usage typically means one or more thread pools are running low. If a thread pool is depleted, {es} will <> related to the thread pool. For example, if the `search` thread pool is depleted, {es} will reject search requests until more threads are available. [discrete] [[diagnose-high-cpu-usage]] ==== Diagnose high CPU usage **Check CPU usage** include::{es-ref-dir}/tab-widgets/cpu-usage-widget.asciidoc[] **Check hot threads** If a node has high CPU usage, use the <> to check for resource-intensive threads running on the node. [source,console] ---- GET _nodes/my-node,my-other-node/hot_threads ---- // TEST[s/\/my-node,my-other-node//] This API returns a breakdown of any hot threads in plain text. [discrete] [[reduce-cpu-usage]] ==== Reduce CPU usage The following tips outline the most common causes of high CPU usage and their solutions. **Scale your cluster** Heavy indexing and search loads can deplete smaller thread pools. To better handle heavy workloads, add more nodes to your cluster or upgrade your existing nodes to increase capacity. **Spread out bulk requests** While more efficient than individual requests, large <> or <> requests still require CPU resources. If possible, submit smaller requests and allow more time between them. **Cancel long-running searches** Long-running searches can block threads in the `search` thread pool. To check for these searches, use the <>. [source,console] ---- GET _tasks?actions=*search&detailed ---- The response's `description` contains the search request and its queries. `running_time_in_nanos` shows how long the search has been running. [source,console-result] ---- { "nodes" : { "oTUltX4IQMOUUVeiohTt8A" : { "name" : "my-node", "transport_address" : "127.0.0.1:9300", "host" : "127.0.0.1", "ip" : "127.0.0.1:9300", "tasks" : { "oTUltX4IQMOUUVeiohTt8A:464" : { "node" : "oTUltX4IQMOUUVeiohTt8A", "id" : 464, "type" : "transport", "action" : "indices:data/read/search", "description" : "indices[my-index], search_type[QUERY_THEN_FETCH], source[{\"query\":...}]", "start_time_in_millis" : 4081771730000, "running_time_in_nanos" : 13991383, "cancellable" : true } } } } } ---- // TESTRESPONSE[skip: no way to get tasks] To cancel a search and free up resources, use the API's `_cancel` endpoint. [source,console] ---- POST _tasks/oTUltX4IQMOUUVeiohTt8A:464/_cancel ---- For additional tips on how to track and avoid resource-intensive searches, see <>.