我正在使用 ZeroMQ 在多个服务之间进行通信。我遇到了一个问题,我正在发送回复,但他们从未联系到呼叫者。我做了很多调试,无法弄清楚发生了什么。我最终减小了消息大小(我正在返回查询结果)并且消息开始进入。然后我增加了 JVM 的内存大小并且原始消息开始返回。
这让我相信这些消息太大而无法放入内存中,ZeroMQ 只是将它们丢弃了。我的问题是,我怎样才能正确调试这个?ZeroMQ 是否输出任何日志或内存转储?
我正在使用 ZeroMQ 的 Java 版本。
我正在使用 ZeroMQ 在多个服务之间进行通信。我遇到了一个问题,我正在发送回复,但他们从未联系到呼叫者。我做了很多调试,无法弄清楚发生了什么。我最终减小了消息大小(我正在返回查询结果)并且消息开始进入。然后我增加了 JVM 的内存大小并且原始消息开始返回。
这让我相信这些消息太大而无法放入内存中,ZeroMQ 只是将它们丢弃了。我的问题是,我怎样才能正确调试这个?ZeroMQ 是否输出任何日志或内存转储?
我正在使用 ZeroMQ 的 Java 版本。
问:“......我怎样才能正确调试这个?”
好吧,如果有人知道本机 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 数据泵引擎的所有可能和可调整的参数)。