高 CPU 使用率
编辑高 CPU 使用率编辑
Elasticsearch 使用 线程池 来管理并发操作的 CPU 资源。高 CPU 使用率通常意味着一个或多个线程池资源不足。
如果线程池耗尽,Elasticsearch 将会 拒绝 与该线程池相关的请求。例如,如果 search
线程池耗尽,Elasticsearch 将会拒绝搜索请求,直到有更多线程可用。
诊断高 CPU 使用率编辑
检查 CPU 使用率
在部署菜单中,点击 性能。页面的 CPU 使用率 图表以百分比显示部署的 CPU 使用率。
高 CPU 使用率也会耗尽您的 CPU 配额。CPU 配额允许 Elasticsearch Service 在需要时为较小的集群提供性能提升。CPU 配额 图表显示您剩余的 CPU 配额,以 CPU 时间(秒)为单位。
您还可以使用 cat nodes API 获取每个节点的当前 CPU 使用率。
response = client.cat.nodes( v: true, s: 'cpu:desc' ) puts response
GET _cat/nodes?v=true&s=cpu:desc
响应的 cpu
列包含当前 CPU 使用率(百分比)。name
列包含节点的名称。
使用 cat nodes API 获取每个节点的当前 CPU 使用率。
response = client.cat.nodes( v: true, s: 'cpu:desc' ) puts response
GET _cat/nodes?v=true&s=cpu:desc
响应的 cpu
列包含当前 CPU 使用率(百分比)。name
列包含节点的名称。
检查热点线程
如果节点的 CPU 使用率很高,请使用 节点热点线程 API 检查节点上运行的资源密集型线程。
response = client.nodes.hot_threads( node_id: 'my-node,my-other-node' ) puts response
GET _nodes/my-node,my-other-node/hot_threads
此 API 以纯文本形式返回任何热点线程的细分。
降低 CPU 使用率编辑
以下提示概述了导致 CPU 使用率高的最常见原因及其解决方案。
扩展集群
繁重的索引和搜索负载可能会耗尽较小的线程池。为了更好地处理繁重的工作负载,请向集群添加更多节点或升级现有节点以提高容量。
分散批量请求
虽然比单个请求更有效,但大型 批量索引 或 多重搜索 请求仍然需要 CPU 资源。如果可能,请提交较小的请求并在它们之间留出更多时间。
取消长时间运行的搜索
长时间运行的搜索可能会阻塞 search
线程池中的线程。要检查这些搜索,请使用 任务管理 API。
response = client.tasks.list( actions: '*search', detailed: true ) puts response
GET _tasks?actions=*search&detailed
响应的 description
包含搜索请求及其查询。running_time_in_nanos
显示搜索已运行的时间。
{ "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 } } } } }
要取消搜索并释放资源,请使用 API 的 _cancel
端点。
response = client.tasks.cancel( task_id: 'oTUltX4IQMOUUVeiohTt8A:464' ) puts response
POST _tasks/oTUltX4IQMOUUVeiohTt8A:464/_cancel
有关如何跟踪和避免资源密集型搜索的其他提示,请参阅 避免代价高昂的搜索。