klu*_*utt 6 memory top 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
Run Code Online (Sandbox Code Playgroud)
我知道 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
Run Code Online (Sandbox Code Playgroud)
And*_*ton 18
在您的示例中,pulseaudio使用的是 32MB 而不是 3GB。该RES列是物理内存。该VIRT列显示进程使用的所有虚拟内存。根据man top,这包括所有代码、数据和共享库以及已换出的页面和已映射但未使用的页面。
您可以使用pmap工具查看有关虚拟内存使用情况的更多详细信息:
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
Run Code Online (Sandbox Code Playgroud)
对我来说,使用的大部分内存是 64MBmemfd缓冲区。memfd是进程间通信的一种方法,应用程序使用它来将音频数据传输到pulseaudio。
尽管为每个应用程序分配了缓冲区的虚拟内存,但实际内存仅用于当前传输的数据量。当应用程序将音频样本写入缓冲区时,会为其分配内存。一旦 pulsaudio 混合并播放了样本,内存将再次释放。