spring-rabbit 客户端使用大量 cpu

spring-rabbit client using lots of cpu

我正在 运行c3.large 机器上的 ec2 中安装 spring-boot 应用程序。它初始化一个 spring-rabbit 客户端,它启动自己的线程。

在使用 YourKit 分析我的应用程序后,我发现在 rabbit 客户端线程内部花费了大量时间,内部:com.rabbitmq.client.impl.AMQConnection$MainLoop.run() 特别是 java.io.DataStream.readUnsignedByte()

对我来说,这看起来像是有一个 while 循环不断阻止从 RabbitMQ 服务器的套接字上获取一些输入。

有人 运行 参与其中吗?我是否正确阅读了分析结果?有没有办法让 amqp 客户端成为非阻塞的?

该代码 (com.rabbitmq.client) 位于 amqp-client(RabbitMQ Java 客户端)底层代码中,由 Spring AMQP 使用。

To me this looks like there is a while loop that continuously blocks on getting some input on a socket from the RabbitMQ server.

是的,但是当它阻塞等待数据时,它不使用 CPU - 只有当数据可用时才使用该方法 return。它没有旋转 cpu 等待数据。