运行一个非常简单的程序(.NET Core 1.0.0-preview2-003121,NEST 2.4.2,Windows 7),该程序生成包含随机数据的文档,并将它们推送到在localhost上运行的ElasticSearch 2.3.4节点{{ 1}}。
程序批量文档插入并使用BulkPutAsync API发送它们。它运行良好一段时间,插入超过500K文件。然后程序似乎停滞不前,ElasticSearch似乎停止索引(CPU使用率下降),最后抛出ES_HEAP_SIZE=4g
。 ElasticSearch日志未显示任何可疑内容,群集状态仍为绿色。
Generator.cs:
TaskCanceledException
ElasticSearchAdaptor.cs:
public static void Generate(params IAdaptor[] adaptors)
{
...
for (int s = 0; s < TotalSemesters; s++)
{
...
if (responses.Count >= 10000)
{
var toInsert = responses.ToArray();
var insertions = adaptors.Select(a => a.Insert(indexName, toInsert)).ToArray();
Task.WaitAll(insertions);
responses.Clear();
}
...
}
...
}
例外:
public async Task Insert(string indexName, ResponseRootObject[] items)
{
var objects = new List<object>();
foreach (var item in items)
{
objects.Add(new
{
index = new
{
_index = indexName,
_type = "responses"
}
});
objects.Add(item);
}
var r = await _client.BulkPutAsync<ResponseRootObject>(indexName, "responses", new PostData<object>(objects));
}
有什么想法吗?