想测试MongoDB的性能(算是一个作业吧),先想到用JMeter作为加压工具,在JMeter里添加线程组,MongDB Source Config除了设置了MongoDB connection其他都是默认设置。线程属性如图的情况
MongoDB Script里写入循环插入的数据,如图
、在运行起来以后,MongoDB的操作都无法进行了,包括mongostat,然后这个执行结束,mongostat的内容继续,也是不是可以说,这段时间JMeter的线程独占了MongoDB的进程?
如果插入内容减少为每个线程10条(或者查询十条),线程属性更改,线程数:100,循环1000,的话,mongostat查询出来的结果就是lock db项的值会接近100%,而且速度很慢。
另:同样的插入内容,如果用java写一个脚本,就不会出现类似的问题,mongostat监听正常,lock db的值也不会突破50%。
请问:
1、是因为我对JMeter的使用不正确吗?
2、是因为Jmeter的内部机制问题吗?
3、是MongoDB和Jmeter配合造成的吗?
我也遇到这个问题了.因为使用了eval指令,会lock整个数据库.
解决办法1:用jmeter执行java代码,(继承AbstractJavaSamplerClient类).
解决办法2:用jsr223的groovy脚本.
参考的jmeter文档:
This Element currently uses com.mongodb.DB#eval which takes a global write lock causing a performance impact on the database, see db.eval() . So it is better to avoid using this element for load testing and use JSR223+Groovy scripting using MongoDBHolder instead. MongoDB Script is more suitable for functionnal testing or test setup (setup/teardown threads)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。