我正在为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中,有一个包装器:点击。
我还建议阅读 东西变坏 愤怒中的厄朗 .