Memory
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
在您的範例中,
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
對我來說,使用的大部分記憶體是 64MB
memfd
緩衝區。memfd
是程序之間通信的一種方法,應用程序使用它來將音頻數據傳輸到pulseaudio。儘管為每個應用程序分配了緩衝區的虛擬記憶體,但實際記憶體僅用於目前傳輸的數據量。當應用程序將音頻樣本寫入緩衝區時,會為其分配記憶體。一旦 pulsaudio 混合併播放了樣本,記憶體就會再次被釋放。