1

locust4j 1.0.0 发布

 2 years ago
source link: https://myzhan.github.io/posts/first-version-of-locust4j/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

locust4j 1.0.0 发布

calendar Dec 14, 2017
clock 1 min read

不知不觉,维护 boomer 已经两年了。说来也奇怪,接到的性能测试需求,一般都是私有协议的,很难直接用 jmeter 这类通用的工具,一般只能基于 boomer 自己写一个。前不久需要压测 Flume 的 Avro Source,这货偏偏没有一个 Go 的客户端!

由于时间紧,只好用 Java 写一个简单版的命令行工具。事后研究一下 Avro 的 ipc 协议,写了一个玩票性质的 avroipc。最近,索性又写了一个 Java 版的 boomer,即 locust4j。灵感来自一位印度哥们写的 nomadacris,得到他的同意,直接就用了他写的 msgpack 相关序列化和反序列化的代码。实现上,基本上是从 boomer 翻译过来的,除了用线程替代 Goroutine,用 ConcurrentLinkedQueue 替代 channel。

So,现在也可以用 Java 来写 locust 的 slave 部分了,即用 Java 来写压测逻辑。无论是 Go 还是 Java,性能方面都能碾压原生的 Python 实现。boomer 和 locust4j,都是从队列中取出用户侧上报的测试结果,统计汇总后再定时上报的。从测试情况来看,locust4j 统计的性能比 boomer 还要厉害。空跑一个死循环的情况下,在我的 MBP 上可以跑到 200w 的 RPS,boomer 只能到 50w。但很少单实例能压到这么高的 RPS,大部分情况下,CPU 和内存都是实际的压测代码在使用。一般压测服务端,Go 标准库用起来更爽一点,如果是 Java,还要去找一个能利用非阻塞 IO 的客户端,不然线程都阻塞在 IO 操作上了,也快不起来。

目前 locust 的 1.0.0 版本已经发布到 maven 的中心库,用 maven 的项目,声明一下即可使用。

<dependency>
    <groupId>com.github.myzhan</groupId>
    <artifactId>locust4j</artifactId>
    <version>1.0.0</version>
</dependency>

如果不用 maven,可以在 release 页面 下一个预先编译好的 jar 包。

在代码库中,有一个用于测试的小程序,里面包含了所有 locust4j 提供的 API。

由于 JVM 中 JIT 和 GC 的存在,locust4j 收集到的响应时间,有可能是错的,用的时候需要注意。JIT 会导致响应时间逐渐变短,GC 会导致响应时间偶尔变长。实际的结果,需要参考被测程序的反应。

Enjoy!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK