Performance 搜索响应时间不稳定地翻倍
我们的系统最近面临CPU使用高峰,其根本原因尚不清楚。在过去,我们面临着高内存使用率和磁盘警报,因为我们每天晚上都要进行批量索引,更新几乎所有的文档。但是高CPU使用率并不是问题 迄今收集的数据: 节点03(共6个数据节点和3个主节点)在5分钟内CPU使用率较高(>95%),导致响应时间峰值为1秒,而平均响应时间为40ms。 通过这些度量,在给定的高CPU节点上的索引计数有一个轻微的波动,同时,在年轻的GC中也有一个轻微的波动(尽管在这两种情况下都不像峰值) 我不排除繁重的索引,因为我们确实有一个卡夫卡消费者在任何时候都接受批量索引数据,但这是以每秒最多250个文档的速度控制的,每次批量调用之间的延迟时间为250毫秒 此外,热线程端点确实提供了一些数据,尽管我还不能破译它 更新 更新了问题标题,因为之前的观察结果是错误的。主要问题是响应时间加倍,CPU使用率不高,因为使用率在一段时间后趋于稳定。 有了一些进展。在峰值之后,CPU使用率逐渐降低,这是正常的。 然而,我们的响应时间始终保持在100-250毫秒之间(通常的平均值为-35-100毫秒) 当前的响应中有一个近似于牙锯(不完全是统一的牙锯)的模式 此外,当出现峰值时,旧GC计数有一个小的波动 在节点统计中未发现任何异常。将在找到时更新。仍在进行调查 还发布了最近的热门帖子-Performance 搜索响应时间不稳定地翻倍,performance,search,elasticsearch,Performance,Search,elasticsearch,我们的系统最近面临CPU使用高峰,其根本原因尚不清楚。在过去,我们面临着高内存使用率和磁盘警报,因为我们每天晚上都要进行批量索引,更新几乎所有的文档。但是高CPU使用率并不是问题 迄今收集的数据: 节点03(共6个数据节点和3个主节点)在5分钟内CPU使用率较高(>95%),导致响应时间峰值为1秒,而平均响应时间为40ms。 通过这些度量,在给定的高CPU节点上的索引计数有一个轻微的波动,同时,在年轻的GC中也有一个轻微的波动(尽管在这两种情况下都不像峰值) 我不排除繁重的索引,因为我们确实有一
节点03显然经历了大量索引
"bulk": {
"threads": 8,
"queue": 0,
"active": 0,
"rejected": 0,
"largest": 8,
"completed": 9528532
我将节点04的统计信息与节点03进行了比较。我在03上还注意到了一些事情
- 4144165个文档但256087749(索引总数)索引请求李>
- 只有节点03具有41个打开的上下文。因此,在您获取此统计数据时,它有41个搜索请求。所有其他节点均为0李>
- 与其他节点相比,节点03和节点01的合并数量非常高李>
另外,刷新间隔是多少?ES中的默认值为1秒。这可能会在批量索引时触发大量合并 节点03显然经历了大量索引
"bulk": {
"threads": 8,
"queue": 0,
"active": 0,
"rejected": 0,
"largest": 8,
"completed": 9528532
我将节点04的统计信息与节点03进行了比较。我在03上还注意到了一些事情
- 4144165个文档但256087749(索引总数)索引请求李>
- 只有节点03具有41个打开的上下文。因此,在您获取此统计数据时,它有41个搜索请求。所有其他节点均为0李>
- 与其他节点相比,节点03和节点01的合并数量非常高李>
另外,刷新间隔是多少?ES中的默认值为1秒。这可能会在批量索引时触发大量合并 如果您可以访问日志,请检查在cpu峰值期间运行的查询类型。排序结果是Cpu密集型的。您可能正在运行返回大量结果的查询。只是猜测…@jay我们有一个带有硬编码结果大小值的业务逻辑设置。还检查了日志中的任何anamoly。找不到任何内容。所有热线程都与搜索相关。你有没有在扣球时把热丝甩了?您的查询有什么变化吗?聚合?如果您在这些服务器上有任何监视设置,是否可以检查节点03在出现峰值时是否正在进行大量合并?@jay在峰值期间没有出现大量搜索查询。正如您在更新的问题中所看到的,我主要关心的是响应时间的增加,这是平时的两倍。如果您可以访问日志,请检查在cpu峰值期间运行的查询类型。排序结果是Cpu密集型的。您可能正在运行返回大量结果的查询。只是猜测…@jay我们有一个带有硬编码结果大小值的业务逻辑设置。还检查了日志中的任何anamoly。找不到任何内容。所有热线程都与搜索相关。你有没有在扣球时把热丝甩了?您的查询有什么变化吗?聚合?如果您在这些服务器上有任何监视设置,是否可以检查节点03在出现峰值时是否正在进行大量合并?@jay在峰值期间没有出现大量搜索查询。正如您在更新的问题中所看到的,我主要关心的是响应时间的增加,这是平时的两倍。索引请求数量的增加可能是因为我们有一个午夜工作,更新几乎所有的文档。此外,我们目前没有逻辑来路由搜索请求。目前,我们将所有搜索请求发送到前3个节点。此外,我们的批量索引大多在午夜运行,如果在此期间搜索响应上升,我们也没问题。当前刷新间隔设置为1秒。关于路由问题。我怀疑只有一个节点会接收所有搜索请求。虽然我们没有适当的路由逻辑,但我们的应用服务器会根据可用性向节点发送请求。即便如此,我们也没有那么多的搜索请求
"bulk": {
"threads": 8,
"queue": 0,
"active": 0,
"rejected": 0,
"largest": 8,
"completed": 9528532