Opened 2 hours ago

Last modified 105 minutes ago

#11259 new defect

anull filter consumes an apparently unbound quantity of memory

Reported by: Alfredo Di Napoli Owned by:
Priority: normal Component: undetermined
Version: 7.1 Keywords:
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

At work we recently upgraded from 5.0.1 to 7.1.0, and we couldn't figure out why some machines in our cluster were really struggling; these are big machines with 16 cores and something like 30GB of RAM. By a quick htop inspection it seemed like for a single ffmpeg command, all the RAM was being eventually consumed and the machines started to swap. Removing the anull filter to the command made the leak go away. We could still see the memory climbing ever so slightly, but not in the same aggressive way.

To reproduce, consider the following command:

% /usr/local/bin/ffmpeg-7.1.0 -i /foo/left/master -i /foo/right/master -i /foo/left/master.muted.mov -i /foo/right/master.muted.mov -aspect 32:9 -y -filter_complex [1:1]anull[hms-1-1]  -filter_complex [0:1]anull[hms-0-1] -filter_complex '[2:v]setpts=PTS-STARTPTS,pad=iw*2:ih:color=white,framerate=30[l];[3:v]setpts=PTS-STARTPTS[r];[l][r]overlay=x=W-w:shortest=1[vout]' -map [vout] -map [hms-1-1] -map [hms-0-1] -shortest /foo/central/master.mp4

Without getting into too much detail, anull here is used just as a way to pass the audio stream, unchanged, to the final video. I can't remember why I'm using anull and not just mapping the relevant audio streams directly, but case on point, this command leaks quite severely. If we amend the command this way:

% /usr/local/bin/ffmpeg-7.1.0 -i /foo/left/master -i /foo/right/master -i /foo/left/master.muted.mov -i /foo/right/master.muted.mov -aspect 32:9 -y -filter_complex '[2:v]setpts=PTS-STARTPTS,pad=iw*2:ih:color=white,framerate=30[l];[3:v]setpts=PTS-STARTPTS[r];[l][r]overlay=x=W-w:shortest=1[vout]' -map [vout] -shortest /foo/central/master.mp4

The leak goes away.

ffmpeg version 7.1 Copyright (c) 2000-2024 the FFmpeg developers
built with gcc 11 (Ubuntu 11.4.0-1ubuntu1~22.04)
configuration: --prefix=/usr/local/ic-ffmpeg-7.1.0 --extra-cflags=-I/usr/local/ic-ffmpeg-7.1.0/include --extra-ldflags=-L/usr/local/ic-ffmpeg-7.1.0/lib --bindir=/usr/local/ic-ffmpeg-7.1.0/bin --extra-libs=-ldl --ld=g++ --enable-gpl --enable-gnutls --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree --enable-frei0r
libavutil      59. 39.100 / 59. 39.100
libavcodec     61. 19.100 / 61. 19.100
libavformat    61.  7.100 / 61.  7.100
libavdevice    61.  3.100 / 61.  3.100
libavfilter    10.  4.100 / 10.  4.100
libswscale      8.  3.100 /  8.  3.100
libswresample   5.  3.100 /  5.  3.100
libpostproc    58.  3.100 / 58.  3.100

Change History (1)

comment:1 by Alfredo Di Napoli, 105 minutes ago

Summary: anull filter consumes an apparently abound quantity of memoryanull filter consumes an apparently unbound quantity of memory
Note: See TracTickets for help on using tickets.