我刚刚安装了 ElasticSearch,根本没有加载任何数据。htop
显示 ElasticSearch 正在运行一堆线程。
为什么 ElasticSearch 运行所有这些进程?它在做什么?
我知道您可以配置htop
为将所有线程分组为一行。但这仍然不能回答为什么任何东西都在运行的问题。
我刚刚安装了 ElasticSearch,根本没有加载任何数据。htop
显示 ElasticSearch 正在运行一堆线程。
为什么 ElasticSearch 运行所有这些进程?它在做什么?
我知道您可以配置htop
为将所有线程分组为一行。但这仍然不能回答为什么任何东西都在运行的问题。
简单的答案是,为了高效,ES 使用许多线程池来执行它需要做的许多事情。
您可能知道 ES 提供了一个非常强大的搜索引擎。因此,为了使潜在的大量用户能够有效地运行潜在的大量查询,ES 使用线程池来执行该工作。
这不是故事的结局。虽然所有这些用户可能会疯狂搜索,但其他用户或进程也可以同时索引大量潜在的数据。出于这个原因,ES 需要另一个线程池来处理它可以获得的许多索引请求。这些索引请求可以有两种形式:索引单个文档,批量索引许多文档。对于这两个索引进程,ES 使用两个不同的线程池。
这还不是故事的结局。当一些用户在搜索而另一些用户在索引数据时,可能有一个备份过程正在运行(ES 称之为快照)。为此,还有另一个线程池。
等等。该列表并不详尽,但您可以相信 ES 有多个线程池来处理它需要处理的内容,并且它知道如何有效地完成它,因为它只会创建可用处理器可以处理的尽可能多的线程。
您可以查看 ES 管理的线程池的完整列表,您可能会更好地了解它在做什么。您还可以使用/_cat/thread_pool
和/_nodes/hot_threads
端点来更好地可视化这些线程正在做什么。