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 等待数据。
我正在 运行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 等待数据。