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