Ich möchte die Effizienz eines bestehenden Erlang-Programms weiter verbessern. Zuerst möchte ich Engpässe identifizieren und dann entscheiden, wo ich weiter optimieren möchte.Wie profiliere ich ein Erlang Programm hinsichtlich der Speichernutzung?
Ich habe fprof
versucht, aber es gibt nur Informationen über Gesamt-und durchschnittliche Laufzeit. Am liebsten würde ich ein Protokoll sehen, das der Ausgabe von fprof ähnlich ist, aber hinsichtlich der durchschnittlichen und gesamten Speichernutzung in Bezug auf Funktionen und Prozesse.
Für den Anfang reicht es wäre, ein einzelnes Modul zu profilieren, die Prozesse nicht laichen, würde es nur Funktionen aufgerufen werden. Das würde mir schon helfen, denn ich könnte das Programm auf verschiedene Module zum Testen aufteilen.
Typische verdächtige Punkte sind, wo größere Listen behandelt werden.
Hier wurde die Verwendung von ++
durch lists:reverse([Head|Tail])
wie Syntax aufgelöst.
Ich überlege auch, ETS-Tabellen anstelle von Listen für Fälle mit mehr als ein paar hundert Elementen zu verwenden.
Vielen Dank im Voraus!
+1. Um Profiling zu unterstützen :) –
Ich bezweifele die Verwendung von ETS-Tabellen über Listen wird ein Vorteil in Bezug auf den Raum, egal wie groß die Liste/ETS-Tabelle ist (eine Liste hat nur einen Overhead von einem Zeiger pro Element) - ETS-Tabellen in der Regel geben Sie nur einen Vorteil in der Zeit. – Amadiro