Um den Speicherverbrauch von Icinga 2 besser verstehen zu können, habe ich mir einen Docker-Container für heaptrack (gbeutner/heaptrack) gebaut. Heaptrack ist ähnlich wie Massif ein Tool, das dabei hilft, herauszufinden, wie Anwendungen Speicher verwenden:
heaptrack
In diesem Fall sieht man sehr schön, dass Strings zahlenmäßig anderen Objekt-Typen in Icinga 2 deutlich überlegen sind. Die Anzahl der geleakten Objekte ist in diesem Fall falsch, da ich den Icinga-Prozess mit Strg-C abgebrochen habe.
Der Speicherverbrauch ist eine der Stellen, an denen ich aktuell fleißig am optimieren bin, um sowohl den insgesamt benötigten Speicher allgemein zu verringern, aber auch um die Anzahl der temporär angelegten Objekte so klein wie möglich zu halten – was sich positiv auf die benötigte CPU-Zeit auswirkt. Zwischen der Version 2.4.10 und dem aktuellen Git-Master („2.6.0“) habe ich den Config-Validator so z.B. bereits um fast 50% schneller gemacht (71 Sekunden mit 2.4.10 und nun aktuell 37 Sekunden)