solr压力测试
默认配置下对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 缓存优化