Pulseaudio 会泄漏内存吗?

Pulseaudio 会泄漏内存吗?

我调用了top命令并得到了这个:

 PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                  
3433 klutt     20   0 4790760   1.0g 282208 S   8.3   4.2   1261:15 firefox-esr              
2063 klutt      9 -11 3424532  33644  24432 S   7.0   0.1 432:44.69 pulseaudio               
3681 klutt     20   0 3958364 545000 139800 S   6.6   2.2 434:35.72 Web Content       

我知道 Firefox 和 Web 内容占用了大量内存,但是pulseaudio 呢?使用超过3GB正常吗?这是一个错误吗?

$ uname -a
Linux desktop 5.7.0-1-amd64 #1 SMP Debian 5.7.6-1 (2020-06-24) x86_64 GNU/Linux

$ pulseaudio --version
pulseaudio 13.0

$ cat /etc/debian_version 
bullseye/sid

答案1

在您的示例中,pulseaudio使用的是 32MB 而不是 3GB。该RES列是物理内存。该VIRT列显示进程使用的所有虚拟内存。根据man top,这包括所有代码、数据和共享库以及已换出的页面和已映射但未使用的页面。

答案2

您可以使用以下命令查看有关虚拟内存使用情况的更多详细信息映射图工具:

pmap $(pidof pulseaudio) | sort -hk 2

00005590f6f0a000      4K r---- pulseaudio
00005590f6f0b000      4K rw--- pulseaudio
00007f50ea53f000      4K r---- libicudata.so.66.1
00007f50ea540000      4K r-x-- libicudata.so.66.1
....
00007f50e0000000  65536K rw-s- memfd:pulseaudio (deleted)
00007f50f314b000  65536K rw-s- memfd:pulseaudio (deleted)
 total          1679768K

对我来说,大部分使用的内存是 64MBmemfd缓冲区。memfd是一种进程之间通信的方法,应用程序使用它来将音频数据传输到pulseaudio。

尽管缓冲区的虚拟内存是为每个应用程序分配的,但实际内存仅用于当前传输的数据量。当应用程序将音频样本写入缓冲区时,会为其分配内存。一旦 pulsaudio 混合并播放了样本,内存就会再次释放。

答案3

正如其他人所回答的那样,虚拟内存大小对于 RAM 消耗来说并不重要。如果由于其他原因您仍想减少虚拟内存大小pulseaudio 及其客户端进程:

找到你的pulseaudio守护进程配置(最有可能/etc/pulse/daemon.conf)并取消注释并更改设置,enable-shm如下所示:

enable-shm = no

然后重新启动你的机器,或者重新启动pulseaudio

systemctl --user restart pulseaudio

这不会给您带来任何真正的内存节省,并且会导致难以察觉的性能开销,但虚拟内存使用量会下降,您将获得安心!

相关内容