我正在为Elixir应用程序构建一些监控功能,并希望跟踪流程的总长度'消息队列 - 如果它们超过任何合理的值,则意味着系统不能跟上。
如何在现实系统中进行查询? :erlang.system_info/1
似乎没有提供它,您只能从:erlang.process_info/1
获取每个进程的信息。我不喜欢使用后者并手动聚合消息队列长度的想法,因为可能有数千个相关的GenServer进程并且检测它们感觉就像是不必要的开销。
我似乎记得Wombat OAM有这个功能让我认为这是可能的,但我可能会弄错。
答案 0 :(得分:3)
在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 :(得分:1)