Skip to content

Commit 63a68ed

Browse files
committed
app/vlinsert/opentelemetry: explicitly clear references to the underlying byte slice before returning logstorage.Fields to the pool
This is yet another attempt to fix the increased memory usage at VictoriaLogs v1.40.0. The previous attempt at 8997983 was unsuccessful. See #869 (comment)
1 parent 2e1a9e3 commit 63a68ed

File tree

1 file changed

+8
-6
lines changed
  • app/vlinsert/opentelemetry

1 file changed

+8
-6
lines changed

app/vlinsert/opentelemetry/pb.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,14 @@ func decodeResourceLogs(src []byte, pushLogs pushLogsHandler) (err error) {
5454
defer putFmtBuffer(fb)
5555

5656
fs := logstorage.GetFields()
57-
defer logstorage.PutFields(fs)
57+
defer func() {
58+
// Manually clear all the fields up to capacity in order to remove references to src and help GC freeing up the used memory.
59+
// The logstorage.PutFields() clears only the references up to len(fs.Fields).
60+
clear(fs.Fields[:cap(fs.Fields)])
61+
fs.Fields = fs.Fields[:0]
62+
63+
logstorage.PutFields(fs)
64+
}()
5865

5966
// Decode resource
6067
resourceData, ok, err := easyproto.GetMessageData(src, 1)
@@ -88,9 +95,7 @@ func decodeResourceLogs(src []byte, pushLogs pushLogsHandler) (err error) {
8895
return fmt.Errorf("cannot decode ScopeLogs: %w", err)
8996
}
9097

91-
clear(fs.Fields[streamFieldsLen:])
9298
fs.Fields = fs.Fields[:streamFieldsLen]
93-
9499
fb.buf = fb.buf[:fbLen]
95100
}
96101
}
@@ -175,13 +180,10 @@ func decodeScopeLogs(src []byte, fs *logstorage.Fields, fb *fmtBuffer, pushLogs
175180
pushLogs(timestamp, fs.Fields, streamFieldsLen+1)
176181

177182
// Return back common fields to their places before the next iteration
178-
fieldsLen := len(fs.Fields)
179183
fs.Fields = append(fs.Fields[:streamFieldsLen], fs.Fields[streamFieldsLen+1:commonFieldsLen+1]...)
180-
clear(fs.Fields[commonFieldsLen:fieldsLen])
181184
} else {
182185
pushLogs(timestamp, fs.Fields, streamFieldsLen)
183186

184-
clear(fs.Fields[commonFieldsLen:])
185187
fs.Fields = fs.Fields[:commonFieldsLen]
186188
}
187189

0 commit comments

Comments
 (0)