elasticsearch/docs/reference/troubleshooting/common-issues/high-cpu-usage.asciidoc
Liam Thompson 33a71e3289
[DOCS] Refactor book-scoped variables in docs/reference/index.asciidoc (#107413)
* Remove `es-test-dir` book-scoped variable

* Remove `plugins-examples-dir` book-scoped variable

* Remove `:dependencies-dir:` and `:xes-repo-dir:` book-scoped variables

- In `index.asciidoc`, two variables (`:dependencies-dir:` and `:xes-repo-dir:`) were removed.
- In `sql/index.asciidoc`, the `:sql-tests:` path was updated to fuller path
- In `esql/index.asciidoc`, the `:esql-tests:` path was updated idem

* Replace `es-repo-dir` with `es-ref-dir`

* Move `:include-xpack: true` to few files that use it, remove from index.asciidoc
2024-04-17 14:37:07 +02:00

100 lines
No EOL
2.9 KiB
Text

[[high-cpu-usage]]
=== High CPU usage
{es} uses <<modules-threadpool,thread pools>> 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 <<rejected-requests,reject requests>>
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 <<cluster-nodes-hot-threads,nodes hot
threads API>> 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 <<docs-bulk,bulk indexing>>
or <<search-multi-search,multi-search>> 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 <<tasks,task management API>>.
[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
<<avoid-expensive-searches,Avoid expensive searches>>.