PUSH-000086:无法分配请求的输出缓冲区大小
PUSH-000086: Requested output buffer size could not be allocated
我正在使用 Diffusion 5.8.0 并将客户端连接器的 input-buffer-size
和 output-buffer-size
增加到 1024k。
当客户端使用此连接器连接到服务器时,以下日志消息将输出到服务器控制台:
2016-07-12 10:42:51.997|INFO|Diffusion: InboundThreadPool Thread_0|PUSH-000086|Client Connector: Requested output buffer size could not be allocated, requested: 1M allocated: 208K.|com.pushtechnology.diffusion.comms.connector.ConnectorImpl
2016-07-12 10:42:51.997|INFO|Diffusion: InboundThreadPool Thread_0|PUSH-000085|Connector Client Connector: Requested input buffer size could not be allocated, requested: '1M' allocated: '208K'.|com.pushtechnology.diffusion.comms.connector.ConnectorImpl
发送和接收大于分配的缓冲区大小的消息有效,所以我想知道这是否是我需要担心的事情...
对性能有影响吗?如果是这样,我怎样才能成功分配更大的缓冲区大小?
来自 Diffusion 文档的 Buffer Sizing 页面。
当您增加 input-buffer-size
/output-buffer-size
时,这会配置两个缓冲区;一个在客户端多路复用器中,大小已配置,另一个是由操作系统管理的套接字缓冲区。正如您的情况所发生的那样,操作系统可能不会为您提供指定大小的套接字缓冲区,您可能会分配到一个较小的缓冲区。
这对性能有影响,如下图所示:
在图 1 中,通过线路发送的消息、套接字缓冲区和客户端多路复用器中的缓冲区大小相同。在这种情况下,消息可以直接从线路进入套接字缓冲区,并直接从套接字缓冲区进入客户端多路复用器。
在图 2 中,通过线路发送的消息和客户端多路复用器中的缓冲区大小相同。但是,OS 分配了一个较小的套接字缓冲区,在将完整消息传输到客户端多路复用器之前,需要在多次迭代中对其进行复制。每次迭代都会导致上下文切换,这会对性能产生影响。
如何分配更大的套接字缓冲区取决于您的操作系统。在 Linux 的情况下,您可以执行以下命令来查看套接字缓冲区大小: sysctl -a | grep mem
在我的例子中,执行这条命令的结果包括:
net.core.rmem_default = 212992
net.core.rmem_max = 212992
net.core.wmem_default = 212992
net.core.wmem_max = 212992
这些是 OS 绑定的输入和输出缓冲区大小,可以使用 sysctl -w
命令进行配置。
我正在使用 Diffusion 5.8.0 并将客户端连接器的 input-buffer-size
和 output-buffer-size
增加到 1024k。
当客户端使用此连接器连接到服务器时,以下日志消息将输出到服务器控制台:
2016-07-12 10:42:51.997|INFO|Diffusion: InboundThreadPool Thread_0|PUSH-000086|Client Connector: Requested output buffer size could not be allocated, requested: 1M allocated: 208K.|com.pushtechnology.diffusion.comms.connector.ConnectorImpl
2016-07-12 10:42:51.997|INFO|Diffusion: InboundThreadPool Thread_0|PUSH-000085|Connector Client Connector: Requested input buffer size could not be allocated, requested: '1M' allocated: '208K'.|com.pushtechnology.diffusion.comms.connector.ConnectorImpl
发送和接收大于分配的缓冲区大小的消息有效,所以我想知道这是否是我需要担心的事情...
对性能有影响吗?如果是这样,我怎样才能成功分配更大的缓冲区大小?
来自 Diffusion 文档的 Buffer Sizing 页面。
当您增加 input-buffer-size
/output-buffer-size
时,这会配置两个缓冲区;一个在客户端多路复用器中,大小已配置,另一个是由操作系统管理的套接字缓冲区。正如您的情况所发生的那样,操作系统可能不会为您提供指定大小的套接字缓冲区,您可能会分配到一个较小的缓冲区。
这对性能有影响,如下图所示:
在图 1 中,通过线路发送的消息、套接字缓冲区和客户端多路复用器中的缓冲区大小相同。在这种情况下,消息可以直接从线路进入套接字缓冲区,并直接从套接字缓冲区进入客户端多路复用器。
在图 2 中,通过线路发送的消息和客户端多路复用器中的缓冲区大小相同。但是,OS 分配了一个较小的套接字缓冲区,在将完整消息传输到客户端多路复用器之前,需要在多次迭代中对其进行复制。每次迭代都会导致上下文切换,这会对性能产生影响。
如何分配更大的套接字缓冲区取决于您的操作系统。在 Linux 的情况下,您可以执行以下命令来查看套接字缓冲区大小: sysctl -a | grep mem
在我的例子中,执行这条命令的结果包括:
net.core.rmem_default = 212992
net.core.rmem_max = 212992
net.core.wmem_default = 212992
net.core.wmem_max = 212992
这些是 OS 绑定的输入和输出缓冲区大小,可以使用 sysctl -w
命令进行配置。