性能测试
<p>测试环境:<br />
单机部署RabbitMQ<br />
CentOS6.4操作系统,4核CPU,8G内存<br />
测试中,Exchange、channel均声明为持久化。<br />
测试脚本已上传github:https://github.com/MrKiven/rabbitmq-performance-test"
<h3>测试结果</h3>
<p>一个生产者一个消费者,消息持久化,开启消费者ACK。横轴为时间(单位:秒),纵轴为QPS<br />
<p>一个生产者两个消费者,消息持久化,消费者开启ACK。<br />
<p>一个生产者三个消费者,消息持久化,消费者开启ACK。<br />
<p>两个生产者一个消费者,消息持久化,消费者开启ACK。<br />
<p>两个生产者两个消费者,消息持久化,消费者开启ACK。<br />
<p>两个生产者三个消费者,消息持久化,消费者开启ACK。<br />
<p>一个生产者一个消费者,消息不持久化,消费者开启ACK。<br />
<p>一个生产者一个消费者,消息持久化,消费者不开启ACK。<br />
<p>一个生产者一个消费者,消息不持久化,消费者不开启ACK。<br />
<h3>服务器资源占用情况</h3>
<p>服务器CPU使用情况<br />
<p>磁盘读写情况<br />
<p>Free memory情况<br />
<p>网络I/O情况<br />
<h3>测试结论</h3>
1、 消费者线程数为两个时接收速度最快(此处建议一般的业务逻辑设置两个消费者线程),如果处理比较复杂的逻辑或数据,建议多开启消费者线程数 2、 生产者线程数为二到三个时,发送速度最快,超过这个数后也不能提高发送速度 3、 因生产者发送的速度比消费者块,因此建议可增加消费者线程数提高效率,个人建议为:消费者=生产者*1.5 4、 消息大小对发/收速度影响较大,开启ACK和持久化后1K以上的消息单对单QPS不大与3000 5、 ACK和持久化会大幅降低QPS 6、 服务器可靠性:大量消息收发测试下(百万级别以上),无消息丢失情况发生 7、 生产者和消费者刚开始工作时速度最快,且速度不稳定,工作一段时间后速度趋近与平稳 8、 整个测试过程中服务器系统资源占用稳定,目前暂无服务器瓶颈 9、 对于较大的数据(0.5K以上的),不建议使用一个消费者线程接收(速度比较慢),目前测试下来的结果来看,任何消息,设置两个生产者和三个消费者时性能最佳。 10、开发者可根据上述测试结果结合实际业务来优化使用。