开发者社区> 问答> 正文

JMeter测试MongoDB Lock db占比奇高报错 

想测试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配合造成的吗?

展开
收起
kun坤 2020-06-03 11:18:18 458 0
1 条回答
写回答
取消 提交回答
  • 我也遇到这个问题了.因为使用了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)

    2020-06-03 11:18:26
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
MongoDB多数据中心的方案选型之路 立即下载
阿里云MongoDB云服务构建 立即下载
饿了么高级架构师陈东明:MongoDB是如何逐步提高可靠性的 立即下载

相关镜像