2

我正在使用 ZeroMQ 在多个服务之间进行通信。我遇到了一个问题,我正在发送回复,但他们从未联系到呼叫者。我做了很多调试,无法弄清楚发生了什么。我最终减小了消息大小(我正在返回查询结果)并且消息开始进入。然后我增加了 JVM 的内存大小并且原始消息开始返回。

这让我相信这些消息太大而无法放入内存中,ZeroMQ 只是将它们丢弃了。我的问题是,我怎样才能正确调试这个?ZeroMQ 是否输出任何日志或内存转储?

我正在使用 ZeroMQ 的 Java 版本。

4

1 回答 1

0

“......我怎样才能正确调试这个?”

好吧,如果有人知道本机 ZeroMQ API 设置,至少知道缓冲“机制”和一对{ SNDHWM | RCVHWM }-hard-cut-off 限制,那么可能会进行一些试错测试以微调这些参数。

“ZeroMQ 是否输出任何日志或内存转储?”

好吧,不,本机 ZeroMQ 故意从未尝试过这样做。ZeroMQ 概念的关键优先级是几乎线性可扩展的性能和 Zen-of-Zero 反射,它排除了任何单个操作,不支持在极简的低延迟信封中实现这一点。

然而,较新版本的原生 API 提供了一个名为 socket-monitor 的工具。如果需要,这可能会帮助您编写自己的内部套接字事件分析器。

我在 ZeroMQ 工作的 11 年以上从未让我陷入无法解决的困境。最好了解Context()-instance 和Socket()-instance 参数,这将更好地配置 L3、协议相关和 O/S 相关的缓冲属性(其中一些不需要存在于 java-bindings 中,但本机 API最好地展示了 ZeroMQ 数据泵引擎的所有可能和可调整的参数)。

于 2020-10-13T19:49:04.043 回答