现在发生了什么?
最近,我建立了一个Elasticsearch查询。主要功能是获取直到12周前的每小时数据计数。
查询一遍又一遍。 NodeJS内存将从20mb开始增加到1024mb。 令人惊讶的是,内存并没有立即达到顶峰。它更像是稳定地在25mb以下(保持约几分钟),然后突然开始增长(25mb,46mb,125mb,350mb ...直到1024mb),最终导致NodeJS内存泄漏。 无论我如何称呼此查询,内存都将继续增长并且完全不会释放。而且这种情况仅发生在远程服务器(在docker中运行),在本地docker env完全可以(内存相同)。
如何查询?
如下所示。
const query = {
"size": 0,
"query": {
"bool": {
"must": [
{ terms: { '_id.keyword': array_id } },
{
"range": {
"date_created": {
"gte": start_timestamp - timestamp_twelve_weeks,
"lt": start_timestamp
}
}
}
]
}
},
"aggs": {
"shortcode_log": {
"date_histogram": {
"field": "date_created",
"interval": "3600ms"
}
}
}
}
返回值是多少?
如下所示(总查询时间约为2秒)。
{
"aggs_res": {
"shortcode_log": {
"buckets": [
{
"key": 1594710000,
"doc_count": 2268
},
{
"key": 1594713600,
"doc_count": 3602
},
{//.....total item count 2016
]
}
}
}
答案 0 :(得分:0)
如果您的直方图间隔确实是3600ms(不应该是3600s?),那么在12周内进行汇总的时间就非常短。 表示0.06分钟。 每天24000次 每周168000 2016000,共12周。 它可以解释
在您的示例中,您只有2016个存储桶。 我认为这是您两次测试之间的微小差异。
答案 1 :(得分:0)
新更新。问题已解决。项目中的问题在服务器和数据库之间具有层。因此导致查询内存的这一层代码无法释放。