我在个人邮箱中进行弹性搜索。
ElasticSearch设置:仅在本地运行
方案: 我正在尝试测试批量查询/聚合的性能。测试用例是对node.js运行异步http请求,而node.js又调用弹性搜索。测试是从Java方法运行的。一次启动50个请求。每个请求都被划分并并行化为node.js中的两个异步(async.parallel)批量查询。我正在使用node-elasticsearch api(使用elasticsearch 1.3 api)。这两个批量查询分别包含13个和10个查询。这两个查询从node.js异步发送到弹性搜索。当弹性搜索返回时,查询结果将合并并发送回测试用例。
观察: 我看到所有的cpu核心都是100%使用的。内存利用率约为90%。所有50个请求的响应时间合计为30秒。如果我只运行单个查询,那么在批量查询中,每个查询都会在不到100毫秒的时间内返回。 Node.js花费的时间可以忽略不计,可以将请求转发给弹性搜索,并结合弹性搜索的响应。 即使从java同步运行测试用例,响应时间也不会改变。我可以说弹性搜索不是并行处理。这是因为我是CPU还是内存绑定? 还有一个观察结果:如果我将弹性搜索的堆大小从1 - 3GB更改,则响应时间不会改变。
我也粘贴了最高命令输出:
top - 18:04:12 up 4:29, 5 users, load average: 5.93, 5.16, 4.15
Tasks: 224 total, 3 running, 221 sleeping, 0 stopped, 0 zombie
Cpu(s): 98.2%us, 1.0%sy, 0.0%ni, 0.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 5955796k total, 5801920k used, 153876k free, 1548k buffers
Swap: 6133756k total, 708336k used, 5425420k free, 460436k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
17410 root 20 0 7495m 3.3g 27m S 366 58.6 5:09.57 java
15356 rmadd 20 0 1015m 125m 3636 S 19 2.2 1:14.03 node
问题: 这是预期的,因为我在本地计算机上而不是在群集中运行弹性搜索?我可以在本地机器上提高性能吗?我肯定会启动一个集群。但我想知道,如何提高性能可扩展性。什么是弹性搜索必然会发生什么?
我无法在论坛中找到这个。我相信这会对其他人有所帮助。谢谢你的帮助。