赞
踩
背景:最近需要了解RabbitMQ相关知识并对其做个简单的性能测试。RabbitMQ Performance Testing Tools(PerfTest)是一款开源的性能测试工具。
工具:rabbitmq_server-3.7.15 + centos7 + rabbitmq-perf-test-2.12.0 + Window10
RabbitMQ有一个测试吞吐量的性能测试工具PerfTest。它是基于Java开发的客户端。可以配置为模拟基本和高级两种负载。源码下载地址:https://bintray.com/rabbitmq/java-tools/perf-test/2.12.0
使用
下载后的源码目录如下:
将html目录中的数据拷贝到bin目录下:
将examples目录中的文件也拷贝到bin目录:
切换到bin目录下 runjava com.rabbitmq.perf.PerfTest --help
- Parsing failed. Reason: Unrecognized option: --helprunjava
- usage: <program>
- -?,--help show usage
- -a,--autoack auto ack
- -A,--multi-ack-every <arg> multi ack every
- -ad,--auto-delete <arg> should the queue be
- auto-deleted, default is
- true
- -b,--heartbeat <arg> heartbeat interval
- -B,--body <arg> comma-separated list of
- files to use in message
- bodies
- -bc,--body-count <arg> number of pre-generated
- message bodies. Use with
- --json-body. Default is
- 100.
- -bfc,--body-field-count <arg> number of pre-generated
- fields and values for
- body. Use with
- --json-body. Default is
- 1000.
- -c,--confirm <arg> max unconfirmed publishes
- -C,--pmessages <arg> producer message count
- -ca,--consumer-args <arg> consumer arguments as
- key/values pairs,
- separated by commas, e.g.
- x-priority=10
- -cri,--connection-recovery-interval <arg> connection recovery
- interval in seconds.
- Default is 5 seconds.
- Interval syntax, e.g.
- 30-60, is supported to
- specify an random
- interval between 2 values
- between each attempt.
- -ct,--confirm-timeout <arg> waiting timeout for
- unconfirmed publishes
- before failing (in
- seconds)
- -ctp,--consumers-thread-pools <arg> number of thread pools to
- use for all consumers,
- default is to use a
- thread pool for each
- consumer
- -d,--id <arg> test ID
- -D,--cmessages <arg> consumer message count
- -dcr,--disable-connection-recovery disable automatic
- connection recovery
- -e,--exchange <arg> exchange name
- -E,--exclusive use server-named
- exclusive queues. Such
- queues can only be used
- by their declaring
- connection!
- -env,--environment-variables show usage with
- environment variables
- -f,--flag <arg> message flag(s),
- supported values:
- persistent and mandatory.
- Use the option several
- times to specify several
- values.
- -h,--uri <arg> connection URI
- -H,--uris <arg> connection URIs
- (separated by commas)
- -hst,--heartbeat-sender-threads <arg> number of threads for
- producers and consumers
- heartbeat senders
- -i,--interval <arg> sampling interval in
- seconds
- -jb,--json-body generate a random JSON
- document for message
- body. Use with --size.
- -k,--routing-key <arg> routing key
- -K,--random-routing-key use random routing key
- per message
- -l,--legacy-metrics display legacy metrics
- (min/avg/max latency)
- -L,--consumer-latency <arg> consumer latency in
- microseconds
- -m,--ptxsize <arg> producer tx size
- -M,--framemax <arg> frame max
- -mc,--metrics-client enable client metrics
- -mcl,--metrics-class-loader enable JVM class loader
- metrics
- -mda,--metrics-datadog enable Datadog metrics
- -mdak,--metrics-datadog-application-key <arg> Datadog application key
- -mdd,--metrics-datadog-descriptions if meter descriptions
- should be sent to Datadog
- -mdh,--metrics-datadog-host-tag <arg> tag that will be mapped
- to "host" when shipping
- metrics to datadog
- -mdk,--metrics-datadog-api-key <arg> Datadog API key
- -mds,--metrics-datadog-step-size <arg> step size (reporting
- frequency) to use in
- seconds, default is 10
- seconds
- -mdu,--metrics-datadog-uri <arg> URI to ship metrics,
- useful when using a
- proxy, default is
- https://app.datadoghq.com
- -mh,--metrics-help show metrics usage
- -mjgc,--metrics-jvm-gc enable JVM GC metrics
- -mjm,--metrics-jvm-memory enable JVM memory metrics
- -mjp,--metrics-processor enable processor metrics
- (gathered by JVM)
- -mjt,--metrics-jvm-thread enable JVM thread metrics
- -mjx,--metrics-jmx enable JMX metrics
- -mp,--message-properties <arg> message properties as
- key/value pairs,
- separated by commas, e.g.
- priority=5
- -mpe,--metrics-prometheus-endpoint <arg> the HTTP metrics
- endpoint, default is
- /metrics
- -mpp,--metrics-prometheus-port <arg> the port to launch the
- HTTP metrics endpoint on,
- default is 8080
- -mpr,--metrics-prometheus enable Prometheus metrics
- -mpx,--metrics-prefix <arg> prefix for PerfTest
- metrics, default is
- perftest_
- -ms,--use-millis should latency be
- collected in
- milliseconds, default is
- false. Set to true if
- producers are consumers
- run on different
- machines.
- -mt,--metrics-tags <arg> metrics tags as key-value
- pairs separated by commas
- -n,--ctxsize <arg> consumer tx size
- -na,--nack nack and requeue messages
- -niot,--nio-threads <arg> number of NIO threads to
- use
- -niotp,--nio-thread-pool <arg> size of NIO thread pool,
- should be slightly higher
- than number of NIO
- threads
- -o,--output-file <arg> output file for timing
- results
- -p,--predeclared allow use of predeclared
- objects
- -P,--publishing-interval <arg> publishing interval in
- seconds (opposite of
- producer rate limit)
- -pi,--polling-interval <arg> time to wait before
- polling with basic.get,
- in millisecond, default
- is 0.
- -po,--polling use basic.get to consume
- messages. Do not use this
- in real applications.
- -prsd,--producer-random-start-delay <arg> max random delay in
- seconds to start
- producers
- -pst,--producer-scheduler-threads <arg> number of threads to use
- when using
- --publishing-interval
- -q,--qos <arg> consumer prefetch count
- -Q,--global-qos <arg> channel prefetch count
- -qa,--queue-args <arg> queue arguments as
- key/value pairs,
- separated by commas, e.g.
- x-max-length=10
- -qp,--queue-pattern <arg> queue name pattern for
- creating queues in
- sequence
- -qpf,--queue-pattern-from <arg> queue name pattern range
- start (inclusive)
- -qpt,--queue-pattern-to <arg> queue name pattern range
- end (inclusive)
- -r,--rate <arg> producer rate limit
- -R,--consumer-rate <arg> consumer rate limit
- -rkcs,--routing-key-cache-size <arg> size of the random
- routing keys cache. See
- --random-routing-key.
- -S,--slow-start start consumers slowly (1
- sec delay between each)
- -s,--size <arg> message size in bytes
- -sb,--skip-binding-queues don't bind queues to the
- exchange
- -se,--sasl-external use SASL EXTERNAL
- authentication, default
- is false. Set to true if
- using client certificate
- authentication with the
- rabbitmq_auth_mechanism_s
- sl plugin.
- -sst,--servers-startup-timeout <arg> start timeout in seconds
- (in case the servers(s)
- is (are) not available
- when the run starts).
- Default is to fail
- immediately if the
- servers(s) is (are) not
- available.
- -st,--shutdown-timeout <arg> shutdown timeout, default
- is 5 seconds
- -sul,--servers-up-limit <arg> number of available
- servers needed before
- starting the run. Used in
- conjunction with
- --servers-start-timeout.
- Default is deduced from
- --uri or --uris.
- -t,--type <arg> exchange type
- -T,--body-content-type <arg> body content-type
- -u,--queue <arg> queue name
- -udsc,--use-default-ssl-context use JVM default SSL
- context
- -v,--version print version information
- -vl,--variable-latency <arg> variable consumer
- processing latency with
- [MICROSECONDS]:[DURATION]
- syntax, where
- [MICROSECONDS] integer >=
- 0 and [DURATION] integer
- > 0. Use the option
- several times to specify
- several values.
- -vr,--variable-rate <arg> variable publishing rate
- with [RATE]:[DURATION]
- syntax, where [RATE]
- integer >= 0 and
- [DURATION] integer > 0.
- Use the option several
- times to specify several
- values.
- -vs,--variable-size <arg> variable message size
- with [SIZE]:[DURATION]
- syntax, where [SIZE]
- integer > 0 and
- [DURATION] integer > 0.
- Use the option several
- times to specify several
- values.
- -x,--producers <arg> producer count
- -X,--producer-channel-count <arg> channels per producer
- -y,--consumers <arg> consumer count
- -Y,--consumer-channel-count <arg> channels per consumer
- -z,--time <arg> run duration in seconds
- (unlimited by default)
具体使用(切换到bin目录下使用):
(1)一个生产者,一个消费者
runjava com.rabbitmq.perf.PerfTest -x 1 -y 1 -h "amqp://用户名:密码@ip:端口" -u "perf-test1" -a --id "test1"
runjava com.rabbitmq.perf.PerfTest -x 1 -y 1 -h "amqp://cui:123456@10.9.57.112:5672" -u "perf-test1" -a --id "test1"
解释:
-x:生产者计数
-y:消费者计数
-h:mq服务地址
-u:队列名
-a:自动ack回复
--id:测试id
测试结果:平均每秒发送6619条消息,平均接收2302条消息
(2)一个生产者,一个消费者,消息大小从默认(12字节)更改为4 kB
runjava com.rabbitmq.perf.PerfTest -x 1 -y 1 -h "amqp://cui:123456@10.9.57.112:5672" -u "perf-test1" -a --id "test1" -s 4000
测试结果:平均每秒发送1098条消息,平均接收102条消息
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。