lib/promscrape: further reduce memory usage for per-scrape target labels by making a copy of actually used labels

Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/825
This commit is contained in:
Aliaksandr Valialkin 2020-11-09 10:54:24 +02:00
parent 96e9deecbc
commit aa3e46a02d

View File

@ -643,10 +643,10 @@ func appendScrapeWork(dst []ScrapeWork, swc *scrapeWorkConfig, target string, ex
promrelabel.SortLabels(originalLabels) promrelabel.SortLabels(originalLabels)
labels = promrelabel.ApplyRelabelConfigs(labels, 0, swc.relabelConfigs, false) labels = promrelabel.ApplyRelabelConfigs(labels, 0, swc.relabelConfigs, false)
labels = promrelabel.RemoveMetaLabels(labels[:0], labels) labels = promrelabel.RemoveMetaLabels(labels[:0], labels)
// Remove references to already deleted labels, so GC could clean strings for label name and label value. // Remove references to already deleted labels, so GC could clean strings for label name and label value past len(labels).
// This should reduce memory usage when relabeling creates big number of temporary labels with long names and/or values. // This should reduce memory usage when relabeling creates big number of temporary labels with long names and/or values.
// See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/825 for details. // See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/825 for details.
promrelabel.CleanLabels(labels[len(labels):cap(labels)]) labels = append([]prompbmarshal.Label{}, labels...)
if len(labels) == 0 { if len(labels) == 0 {
// Drop target without labels. // Drop target without labels.