solr

solr压力测试

2018-05-30  本文已影响3人  Java及SpringBoot

默认配置下对solr进行数据插入压力测试:

以书为例 对书籍的类型,url,名称,介绍进行索引,其中url及类型不进行分

采用数据:

每次从四个之间随机取出一个。

开启20个线程 每个线程插入100次文档 每次插入都做提交

服务器资源占用:

每次提交用时4.5s左右。

且最终由异常抛出:Error opening new searcher. exceeded limit of maxWarmingSearchers=2

原因:

​ Solr每次提交时,都会新打开一个searcher,打开searcher花费时间可能较长,在这打开的过程中,假如又有新的提交,又会导致打开新searcher, 当这些新的searcher(未准备好的)的数量超过SolrConfigXml 中配置maxWarmingSearchers时,就会报该错误。

maxWarmingSearchers配置的是同时可以存在的、未准备好的searcher的个数。

解决方法有两种:

1、把maxWarmingSearchers配置大一点。(需要系统有足够的RAM和CPU等,比较危险)

2、较少提交的频率(推荐)

修改为100次文档添加完成后提交:第一次执行,时间为7s左右且有异常抛出

Error opening new searcher. exceeded limit of maxWarmingSearchers=2

第二次执行,时间为4.5s,仍存在异常。

第三次执行,时间为4s 异常消失。

将maxWarmingSearchers修改为4,重启服务

执行 每个提交 时间为3s左右,且无异常抛出

修改为每次添加完立刻commit执行程序查看对服务器资源占用情况

此时资源占用:

峰值接近150% 一般维持在 35% - 50%左右。

每次提交时间分布于 1 - 3s,且有异常抛出

Error opening new searcher. exceeded limit of maxWarmingSearchers=4, try again later.

维持maxWarmingSearchers=4,将线程数降为10。线程每插入1000条提交一次,循环10次:

Cpu 占用维持于 35%-50%之间 内存占用在8%左右

分析日志 每次commit 用时2.5s左右,且运行期没有异常抛出

进行数据读取压力测试:

同时进行10个线程写入,10个线程查询,

响应很快,查看日志,每次响应时间在20ms左右。

同时进行10个线程写入,100个线程查询,

响应很快,查看日志,每次响应时间在25ms左右。

保持当前条件,将查询线程提高到500

查询期间cpu占用瞬时变大,每次响应分布在 200-500ms,峰值出现800s

整个请求用时5s左右(http请求的发送与响应时间也在内)。

同时进行10个线程写入,1000个线程查询,

此时服务器端cpu占用巨大,内存尚可,可以看出solr对cpu依赖较为严重。

每次查询响应时间800ms左右,峰值出现1.5s,较之前有明显下降约为之前20倍。但无异常抛出。

模拟一千个用户对solr进行不停地查询:

服务器资源占用巨大cpu接近400%,solr查询响应随时间增加而下降,最后稳定在800ms左右,偶尔缓存命中出现10ms。

​ 总结

单solr节点下数据写入应该以100-1000(或者更大具体看文档大小决定)个文档提交一次,10线程频繁写入maxWarmingSearchers=4较为稳定。

具体应用中,大批量数据导入应该使用内置数据导入组件。平时小批量数据添加应采用定时批量添加的方式。

Solr数据读取对cpu 占用较大,内存占用一般,可以尝试加大缓存,提高缓存命中率,以减少响应时间和服务器资源占用。

http://www.cnblogs.com/guozk/p/3498831.html 配置定义

http://blog.csdn.net/clj198606061111/article/details/21325239 缓存优化

上一篇下一篇

猜你喜欢

热点阅读