在Erlang/Elixir中获取消息队列的总大小

3
我正在为Elixir应用程序构建一些监控,并希望跟踪进程消息队列的总长度 - 如果它们超过任何合理值,这意味着系统无法跟上。在现实生活系统中如何查询?:erlang.system_info/1似乎没有提供它,而且您只能从:erlang.process_info/1获取每个进程的信息。我不喜欢使用后者并手动聚合消息队列长度,因为可能有数千个相关的GenServer进程,并对它们进行仪表化感觉像是不必要的开销。我记得Wombat OAM有这个功能,这让我觉得可能性很大,但我可能错了。
2个回答

2
在Erlang中:
所有信息::erlang.process_info(self()) 仅消息队列长度::erlang.process_info(self(), :message_queue_len) # => {:message_queue_len, 2} 仅消息::erlang.process_info(self(), :messages) # => {:messages, [:hello, :world]}
在Elixir中:
所有信息:Process.info(self()) 仅消息队列长度:Process.info(self(), :message_queue_len) 仅消息:Process.info(self(), :messages) 两者都会输出相同的内容。

1
这不是我要找的 - 我甚至提到了你建议我使用的函数。我正在寻找一种获取系统中所有进程消息队列长度总和的方法,而不是每个进程的长度。 - nietaki

1

我可能会漏掉一些东西,但我认为recon也没有提供这个功能,而tap只是对recon跟踪的包装,我认为这与该问题无关。我还没有机会阅读《Stuff Goes Bad - Erlang in Anger》这本书,不过很快就会看到它添加了什么内容。 - nietaki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接