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

获取Erlang/Elixir中的消息队列总大小,erlang,elixir,Erlang,Elixir,我正在为Elixir应用程序构建一些监控,并希望跟踪进程消息队列的总长度——如果它们超过任何合理的值,则意味着系统无法跟上 在现实系统中,一个查询如何处理?似乎没有提供,您只能从中获取每个进程的信息。我不喜欢使用后者并手动聚合消息队列长度的想法,因为可能有数千个相关的GenServer进程,对它们进行检测感觉像是不必要的开销 我似乎记得有这个功能,这使我认为这是可能的,但我可能错了。对于Erlang,我建议您使用 在Elixir中,它有一个包装器: 我还建议您阅读。在Erlang中: 所有信息:

我正在为Elixir应用程序构建一些监控,并希望跟踪进程消息队列的总长度——如果它们超过任何合理的值,则意味着系统无法跟上

在现实系统中,一个查询如何处理?似乎没有提供,您只能从中获取每个进程的信息。我不喜欢使用后者并手动聚合消息队列长度的想法,因为可能有数千个相关的GenServer进程,对它们进行检测感觉像是不必要的开销


我似乎记得有这个功能,这使我认为这是可能的,但我可能错了。

对于Erlang,我建议您使用

在Elixir中,它有一个包装器:

我还建议您阅读。

在Erlang中:

所有信息:
:erlang.process\u info(self())

仅消息队列长度:
:erlang.process_info(self(),:message_queue_len)
=>
{:message_queue_len,2}

只有消息:
:erlang.process_info(self(),:messages)
#=>
{:messages,[:hello,:world]}


长生不老药:

所有信息:
Process.info(self())

仅消息队列长度:
Process.info(self(),:message\u queue\u len)

只有消息:
Process.info(self(),:messages)


两者都提供相同的输出,包括

这不是我想要的-我甚至提到了您建议我使用的函数。我正在寻找一种方法来获取系统中所有进程的消息队列长度之和,而不是每个进程的消息队列长度之和。我可能遗漏了一些东西,但我认为recon也没有提供这种功能,而tap只是一个用于recon跟踪的包装器,我认为这与这个问题无关。我还没有机会读《愤怒中的二郎》这本书,我很快就会看到它的补充。