我调用了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
这不会给您带来任何真正的内存节省,并且会导致难以察觉的性能开销,但虚拟内存使用量会下降,您将获得安心!