我正在使用ZeroMQ在多个服务之间进行通信。我遇到了一个问题,我正在发送响应,但它们从未到达呼叫者。我做了很多调试,都搞不清楚到底发生了什么。我最终减小了消息大小(返回查询结果),消息开始传入。然后,我增加了JVM的内存大小,原始消息开始返回。
这让我相信这些消息太大了,无法放入内存,所以ZeroMQ就把它们丢弃了。我的问题是,我如何正确地调试它?ZeroMQ是否输出任何日志或内存转储?
我使用的是ZeroMQ的Java版本。
发布于 2020-10-14 03:49:04
Q:"...how我可以正确地调试它吗?“
好吧,如果知道原生的ZeroMQ应用程序接口设置,至少知道缓冲“机制”和一对{ SNDHWM | RCVHWM }硬截止限制,那么人们可能会做一些试错测试来微调这些参数。
Q:“ZeroMQ是否输出任何日志或内存转储?”
嗯,不,原生ZeroMQ从来没有尝试过这样做。ZeroMQ概念的关键优先级是几乎线性可扩展的性能和反映了排除任何单个操作的零点,这些操作不支持在最小的低延迟信封上实现这一点。
但是,本地API的较新版本提供了一个名为socket-monitor的工具。如果需要,这可能会帮助您编写自己的内部套接字事件分析器。
我与ZeroMQ共事的11+时代从未让我陷入无法解决的困境。最好获得对Context()-instance和Socket()-instance参数的必要了解,这将更好地配置L3、协议相关和O/S相关的缓冲属性(其中一些属性不需要出现在java绑定中,但是原生API最好地显示了ZeroMQ数据抽取引擎的所有可能的和可调整的参数)。
https://stackoverflow.com/questions/64338280
复制相似问题