繁体   English   中英

如何对PouchDB进行压力测试

[英]How to stress test PouchDB

我们正在研究使用CouchDB和PouchDB堆栈,并且我们希望对CouchDB进行压力测试,因为其中一个用例可以同时复制多达70-80个用户。

我们设法对CouchDB进行了压力测试,并对结果感到满意,但是我们希望从PouchDB进行一些端到端的压力测试。

我已经尝试了几件事:

1)使用可在for循环中启动许多页面的PhantomJS脚本2)使用可在Github上找到的具有某种并行功能的PhantomJS脚本3)使用bash脚本和&启动多个phantomJS 4)使用bash脚本和GNU并行启动PhantomJS的多个实例*上面的所有测试都使用waitFor函数仅在将全局变量设置为true时完成(我认为这是等待页面中所有JS执行的唯一方法)

虽然一个phantomJS执行大约需要200-300ms,但是当运行多个phantomJS时,它们似乎以某种方式被排队,在大约30个执行中的最后一个期间,我们将数字从200ms增加到30,000ms。

看起来PhantomJS正在以某种方式排队。 如我所见,每个后续请求的n * 200ms稳定增长。

我可能可以在2-3个设备上构建一个演示应用程序,然后循环执行PUT和复制,但是我想尝试以一种类似的方式编写脚本,以使Siege可以对具有多个资产的页面进行压力测试。 只有,我希望它“等待”直到页面真正完成并且所有JS完成运行为止。

关于如何执行此操作的任何想法?

听起来您正在尝试通过模拟希望从用户那里收到的负载来对整个系统进行压力测试,即您不是在尝试测试浏览器本身的性能。 (如果不是这种情况,并且您正在尝试在浏览器中进行测试,那么我们已经在PouchDB中进行了一些浏览器性能测试 ,尽管由于PhantomJS是一个旧的浏览器,您可能会从PhantomJS中得到不好的数字。)

由于PouchDB是同构的,因此我建议避免使用PhantomJS,而应该在LevelDB之上运行一些Node.js进程来模拟用户。 PhantomJS确实可能存在一些排队问题,因为基础数据存储区是WebSQL,它具有全局写锁。 但是,使用Node,您可以拥有单独的进程,每个进程代表一个线程。 您只需要确保每个人都有一个单独的LevelDB,因为LevelDB不是线程安全的(例如, new PouchDB('/tmp/some/random/directory') )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM