长时间运行我的 Gstreamer 管道后,我一直收到 OOM 错误。 在 Jetson-Xavier Devkit 上运行。
最小的可重现示例:
gst-launch-1.0 videotestsrc ! omxh265enc ! qtmux ! filesink location=test.mp4 -e
跑前记忆:
sh-5.1# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 0 5384300 307304 18665008 0 0 9 59 28 51 6 2 92 0 0
运行2分钟后的记忆:
sh-5.1# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
10 0 0 5151928 307560 18820992 0 0 9 59 29 1 6 2 92 0 0
运行10分钟后的记忆:
sh-5.1# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
4 0 0 4794396 308008 19138836 0 0 9 60 31 5 6 2 92 0 0
停止后的记忆:
sh-5.1# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 4836532 308040 19140984 0 0 9 60 31 5 6 2 92 0 0
RAM 利用率永远不会停止相对线性增长,并且当我停止进程时缓存不会被释放。
如果我用
filesink
替换 fakesink
就不会发生这种情况:
gst-launch-1.0 videotestsrc ! omxh265enc ! qtmux ! fakesink
跑前记忆:
sh-5.1# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 4836532 308040 19140984 0 0 9 60 31 5 6 2 92 0 0
运行2分钟后的记忆:
sh-5.1# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 4608692 308192 19141064 0 0 9 60 32 7 6 2 92 0 0
我注意到
splitmuxsink
有同样的问题,在使用 mp4mux
时,以及在关闭 omxh265enc
时,所以我假设 filesink
有什么问题?
有没有人对此有任何见解或知道如何防止 gstreamer 使用我的所有内存?