2017-08-24 4 views
3

Ich baue eine Überwachung für eine Elixir-App und möchte die Gesamtlänge der Nachrichtenwarteschlangen des Prozesses verfolgen. Wenn sie einen vernünftigen Wert überschreiten, würde das System isn bedeuten Ich halte nicht mit.Ermitteln der Gesamtgröße der Nachrichtenwarteschlange in Erlang/Elixir

Wie würde man in einem realen System nachfragen? :erlang.system_info/1 scheint es nicht zu bieten, und Sie können pro Prozess Informationen nur von :erlang.process_info/1 erhalten. Ich mag die Idee nicht, letztere zu verwenden und die Länge der Nachrichtenwarteschlangen manuell zu aggregieren, da es potenziell tausende von relevanten GenServer-Prozessen gibt und deren Instrumentierung sich als unnötiger Overhead anfühlt.

Ich glaube mich zu erinnern Wombat OAM mit dieser Funktionalität, die mich denken lässt, dass es möglich ist, aber ich könnte mich irren.

Antwort

1

Für Erlang würde ich Ihnen empfehlen, recon zu verwenden.

In Elixir gibt es eine Verpackung: tap.

Ich würde auch vorschlagen, Stuff Goes Bad Erlang in Anger zu lesen.

+0

umfasst ich Dinge fehlen könnte, aber ich don Denken Sie, dass Recon diese Funktionalität auch anbietet, und tap ist nur ein Wrapper für die Rückverfolgbarkeit, was meiner Meinung nach für diese Frage irrelevant ist. Ich hatte noch keine Gelegenheit, das Buch "Stuff Goes Bad - Erlang in Anger" zu lesen, ich werde sehen, was es bald hinzufügt. – nietaki

3

In Erlang:

Alle Infos: :erlang.process_info(self())

Nur die Nachrichtenwarteschlange Länge: :erlang.process_info(self(), :message_queue_len) # =>{:message_queue_len, 2}

Nur die Nachrichten: :erlang.process_info(self(), :messages) # =>{:messages, [:hello, :world]}


In Elixir:

Alle Infos: Process.info(self())

Nur die Nachrichtenwarteschlange Länge: Process.info(self(), :message_queue_len)

Nur die Nachrichten: Process.info(self(), :messages)

Beide geben die gleiche Leistung, die

+1

Das ist nicht, was ich suche - ich erwähnte sogar die Funktionen, die Sie vorschlagen, die ich verwende. Ich suche nach einer Möglichkeit, die Summe der Nachrichtenwarteschlangenlängen für alle Prozesse im System zu erhalten, nicht pro Prozess. – nietaki

Verwandte Themen