
Ubuntu 22.04에서 메모리에 이상한 문제가 발생했습니다. 내 메모리 사용량이 왜 이렇게 높은지 알 수 없는 것 같습니다. 노트북을 부팅하면 메모리 사용량이 예상한 대로인데 시간이 지나면서 뭔가 메모리를 소모하는 것 같지만 시스템에서는 메모리가 어떤 용도로 사용되는지 모르는 것 같습니다.
노트북이 며칠 동안 실행되고 밤새 잠자기 상태가 되면 free -m
다음과 같은 결과가 보고됩니다.
total used free shared buff/cache available
Mem: 14812 7329 2683 1810 4799 5348
Swap: 2047 416 1631
모든 신청이 마감되었으며, 안내에 따라이 도구모든 애플리케이션에서 사용하는 누적 메모리는 1.7GiB입니다. 그렇다면 마지막 ~5.5GiB(7.2-1.7)를 사용하는 것은 무엇입니까?
뭔가 빠졌나요?
답변1
이 답변은 OP에서 발생하는 수준을 넘어설 수 있는 "설명되지 않은" 메모리 사용의 가능한 원인을 해결하기 위해 작성되었습니다.
배경
Linux에서 메모리 사용량은 크게 두 가지 요소에 기인할 수 있습니다.
- 프로세스/스레드별 사용량
- 파일 시스템에 의한 사용법
이 질문의 경우 OP는 프로세스/스레드에서 사용된 모든 메모리를 설명할 수 없습니다. 따라서 나머지 메모리는 커널에서 파일 시스템 작업에 사용될 가능성이 매우 높습니다.
예상 원인
나는 현재 과도한 파일 시스템 메모리 사용에 대한 세 가지 주요 이유를 알고 있습니다.
- ZFS ARC 캐시(또는 "정상적인" 메모리 사용량으로 등록되는 유사한 파일 시스템 캐시)
- Ramdisk(
tmpfs
및 유사한 파일 시스템) - 과도한 디스크 I/O와 결합된 기본 파일 시스템 압축(결과적으로 지속적인 메모리 소비로 인해 압축/재압축이 발생함)
이러한 3가지 시나리오의 문제를 해결하려면 다음을 권장합니다.
1. ZFS ARC 캐시
ZFS ARC 캐시에 대한 자세한 정보를 얻으려면 다음 명령을 실행하십시오.
arcstat -a
에서 보고한 통계는 size
일반적으로 사용된 메모리로 표시됩니다.
귀하의 게시물에 따르면 여기서는 0.5GB가 사용되는 것이 분명합니다.
2. 램디스크
현재 파일 시스템 램디스크에 대한 정보를 얻으려면 다음 명령을 실행하십시오 tmpfs
.
df -hl -t"tmpfs"
에서 보고한 모든 양은 used
일반적으로 사용된 메모리로 표시됩니다.
Ubuntu(및 기타 여러 Linux 변형)에는 /dev/shm
. 애플리케이션은 이 공간을 사용할 수 있으므로 다음을 통해 쉽게 확인할 수 있습니다.
ls -ahl /dev/shm
또한 출력 아래 에 tmpfs
사용량도 표시되므로 게시물을 보면 여기서는 1.8GB가 사용된 것이 분명합니다.shared
free
3. FS 압축
다음 명령으로 디스크 IO를 확인하십시오. ( 패키지 iostat
의 일부입니다 sysstat
)
iostat
이를 관련 디스크에 대해 활성화된 파일 시스템 압축에 대한 지식과 결합합니다. ZFS의 경우 다음 명령을 실행하여 모든 Zpool 및 데이터 세트에 대한 압축 속성을 가져옵니다.
zfs get compression
디스크 IO가 높고 기본 압축이 활성화된 경우 과도한 메모리가 정상적으로 사용된 메모리로 보고될 수 있습니다.
답변2
파일 시스템이나 BTRFS 또는 ZFS와 같은 쓰기 시 복사 파일 시스템에서 압축을 사용하고 있습니까?
과도한 메모리 사용량은 커널이 실시간으로 파일을 (재)압축하려고 시도하거나 큰 파일이 자주 변경될 때 각 쓰기를 복사/버전 관리하기 때문에 발생할 수 있습니다.
파일이 자주 변경되고 크기가 메가바이트가 아닌 기가바이트로 지정되는 가상 머신용 이미지와 같은 대용량 파일이 있는 경우 메모리 부족이 특히 두드러집니다.
파일 시스템/하위 볼륨/볼륨 수준 또는 개별 파일 수준에서 압축을 비활성화하거나 COW(쓰기 시 복사) 비활성화를 살펴볼 수 있습니다.
BTRFS:
특정 파일에 대한 압축 제거를 지원합니다. btrfs 명령:
property set <file> compression none
특정 폴더에 대해 COW(쓰기 시 복사)를 제거하려면:
chattr -R +C /directory/of/your/vm_images/
ZFS:
개별 파일의 압축을 제거할 수 없다고 생각합니다. 볼륨에서 압축을 비활성화하면 향후 쓰기에만 영향을 미치므로 파일 압축을 비활성화하려면 각 파일을 개별적으로 복사해야 합니다.
zfs set compression=off name_of_zfs_vol