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



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

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

我似乎记得 Wombat OAM 具有此功能,这让我认为这是可能的,但我可能弄错了。

在 Erlang 中:

所有信息::erlang.process_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_queue_len)

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

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

对于 Erlang,我建议您使用 recon。

在Elixir中,有一个包装器:点击。

我还建议阅读 东西变坏 愤怒中的厄朗 .

最新更新