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와 웹 콘텐츠가 많은 메모리를 차지한다는 것을 알고 있지만 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

귀하의 예에서는 pulseaudio3GB 대신 32MB가 사용되었습니다. 이 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

나에게 있어서 사용되는 메모리의 대부분은 64MB memfd버퍼이다. memfd오디오 데이터를 펄스 오디오로 전송하기 위해 애플리케이션에서 사용하는 프로세스 간 통신 방법입니다.

버퍼의 가상 메모리는 각 애플리케이션에 할당되지만 실제 메모리는 현재 전송되는 데이터 양만큼만 사용됩니다. 애플리케이션이 오디오 샘플을 버퍼에 기록하면 이를 위해 메모리가 할당됩니다. pulseaudio가 샘플을 믹싱하고 재생하면 메모리가 다시 해제됩니다.

답변3

다른 사람들이 대답했듯이 가상 메모리 크기는 RAM 소비에 중요하지 않습니다. 다른 이유로 여전히 원하는 경우가상 메모리 크기 줄이기pulseaudio 및 해당 클라이언트 프로세스:

pulseaudio 데몬 구성(아마도 /etc/pulse/daemon.conf)을 찾아 주석 처리를 제거하고 enable-shm다음과 같이 설정을 변경합니다.

enable-shm = no

그런 다음 컴퓨터를 다시 시작하거나 pulseaudio를 다시 시작하세요.

systemctl --user restart pulseaudio

이렇게 하면 실제 메모리가 절약되지 않고 눈에 띄지 않는 성능 오버헤드가 발생하지만 가상 메모리 사용량이 줄어들어 마음의 평화를 얻을 수 있습니다!

관련 정보