데스크탑 메모리 부족 문제를 진단하는 동안(추가 정보U&L에서) 캐시되지 않은 "커널 동적 메모리"가큰:
# smem -twk
Area Used Cache Noncache
firmware/hardware 0 0 0
kernel image 0 0 0
kernel dynamic memory 1.1G 369.3M 801.7M
userspace memory 2.0G 133.3M 1.9G
free memory 734.1M 734.1M 0
----------------------------------------------------------
3.9G 1.2G 2.7G
다른 두 시스템에서는 150MiB(데스크톱도 있지만 8GiB 또는 RAM 포함)와 29MiB인지 확인했습니다. 내 데스크탑의 20% 미만입니다.
무엇이 그렇게 큰지 어떻게 알 수 있나요?
참고: 소스를 확인해 보니 smem
기본적으로 이렇습니다(memtotal - 사용자 공간 - 무료 - 캐시).
/proc/meminfo
:
#고양이/proc/meminfo 총 메모리: 4051956kB 사용 가능한 메모리: 508276kB 버퍼: 35232kB 캐시: 651052KB 스왑 캐시: 121380kB 활성: 1358008kB 비활성: 1351596kB 활성(익명): 1184616kB 비활성(익명): 886904kB 활동(파일): 173392kB 비활성(파일): 464692kB 제거 불가능: 8616kB 잠김: 8616kB 총 교환량: 4051952kB 익일이자 없음: 3815780 kB 더티: 348kB 다시 쓰기: 0kB 익명 페이지: 1971164 kB 지도: 140108kB 메모리: 44656kB 태블릿: 176564kB 재활용 가능: 62080kB S 회수 취소: 114484 kB 커널 스택: 3352kB 페이지 테이블: 43012kB NFS_불안정: 0kB 바운스: 0kB Tmp에 다시 쓰기: 0kB 커밋 제한: 6077928kB 커밋됨_AS: 3681164kB 총 Vmalloc: 34359738367kB Vmalloc 사용량: 139780kB VmallocChunk: 34359570976kB 하드웨어 손상: 0kB AnonHuge페이지:448512 kB HugePages_Total: 0 HugePages_Free:0 HugePages_Rsvd: 0 HugePages_Surp: 0 큰 페이지 크기: 2048kB DirectMap4k: 2536128kB DirectMap2M: 1656832kB
답변1
다른 글을 보니 zram을 사용하고 계시는 것 같네요. 그게 내 가정이다.
저는 zram을 설치하고 많은 메모리를 소비한 경험이 있으며 smem
귀하와 동일한 결과를 얻습니다.smem
zram
그 수 와 상관없이, 값을 계산하는 데만 사용됩니다 /proc/meminfo
. 코드를 보고 이해하려고 하면 zram RAM 점유가 궁극적으로 다음에서 계산된다는 것을 알 수 있습니다.캐시되지 않은열커널 동적 메모리철사.
추가 조사
이 동작의 배후에는 zram이 있다는 직감에 따라 귀하의 컴퓨터와 비슷한 사양(4GB RAM 및 2GB zram 스왑, 스왑 파일 없음)으로 가상 머신을 설정했습니다.
중량급 애플리케이션을 가상 머신에 로드했는데 다음과 같은 상태가 표시되었습니다.
huygens@ubuntu:~$ smem -wt -K ~/vmlinuz-3.2.0-38-generic.unpacked -R 4096M
Area Used Cache Noncache
firmware/hardware 130717 0 130717
kernel image 13951 0 13951
kernel dynamic memory 1063520 922172 141348
userspace memory 2534684 257136 2277548
free memory 451432 451432 0
----------------------------------------------------------
4194304 1630740 2563564
huygens@ubuntu:~$ free -m
total used free shared buffers cached
Mem: 3954 3528 426 0 79 858
-/+ buffers/cache: 2589 1365
Swap: 1977 0 1977
보시다시피 free
858MB의 캐시 메모리가 보고되는데, 이는 smem
캐시 커널 동적 메모리에서도 보고되는 것으로 보입니다.
그런 다음 Chromium 브라우저를 사용하여 시스템을 더욱 강조했습니다. 처음에는 83MB의 스왑 공간만 사용됩니다. 하지만 몇 개의 탭을 연 후 스왑이 거의 최대로 빠르게 전환되었고 OOM을 경험했습니다! zram
위험한 측면이 있습니다. 잘못 구성하면(너무 크면) 투석기처럼 돌아올 수 있습니다.
당시 나는 다음과 같은 결과를 얻었습니다.
huygens@ubuntu:~$ smem -wt -K ~/vmlinuz-3.2.0-38-generic.unpacked -R 4096M
Area Used Cache Noncache
firmware/hardware 130717 0 130717
kernel image 13951 0 13951
kernel dynamic memory 1355344 124072 1231272
userspace memory 961004 36456 924548
free memory 1733288 1733288 0
----------------------------------------------------------
4194304 1893816 2300488
huygens@ubuntu:~$ free -m
total used free shared buffers cached
Mem: 3954 2256 1698 0 4 132
-/+ buffers/cache: 2118 1835
Swap: 1977 1750 227
커널 동적 메모리(캐시된 열과 캐시되지 않은 열)를 보면 거꾸로 된 것처럼 보입니까? 이는 첫 번째 경우 커널에 보고된 것과 같은 "캐시" 메모리가 있지만 계산 방법을 모르는 스왑 메모리가 있기 때문입니다(smem 소스 코드를 확인하면 zram 점유가 /proc/에 보고되지 않음 ) free
. meminfo ), 이는 단순한 "총 커널 메모리"로 계산되지 않습니다. - "내가 알고 있는 meminfo에 의해 보고된 메모리 유형이 캐시되어 있습니다." 계산된 총 커널 메모리에 RAM에 있는 스왑을 추가한다는 사실은 알 수 없습니다. 가운데! )zram
smem
smem
이 상태에서 hdd 스왑을 활성화하고 zram 스왑을 끄고 zram 장치를 재설정했습니다 echo 1 > /sys/block/zram0/reset
.
그 후에는 캐시되지 않은 커널 메모리가 여름 눈처럼 녹아 "정상" 값으로 돌아갑니다.
결론적으로
smem
zram
아직이라서 그럴지도 모르지분할불따라서 /proc/meminfo
전역 매개변수(예: 활성 페이지 크기, 총 메모리)는 보고되지 않으며 일부 특정 매개변수만 보고됩니다. smem
이러한 특정 매개변수 중 일부를 "캐시"로 식별하고 이를 합산하여 총 메모리와 비교합니다. 이로 인해 zram
사용된 메모리가 계산됩니다.캐시되지 않은기둥.
참고: 그런데 최신 커널에서는 meminfo
소비된 공유 메모리도 보고됩니다. 이는 아직 고려되지 않았으므로 smem
no의 zram
출력 도 smem
신중하게 고려해야 합니다. 공유 메모리를 많이 사용하는 애플리케이션을 사용하는 경우.
사용된 참고자료:
답변2
쉽게 회수할 수 있는 메모리가 많아서 제 눈에는 괜찮아 보입니다. 정확히 작동하지 않는 것은 무엇입니까("오, 끔찍합니다. <무작위 프로그램>이 제공하는 숫자를 보세요!")? 프로그램 충돌(OOM, 메모리 부족, 핸들러 시작)? 프로그램을 시작할 수 없나요? 감각 시스템이 부진합니까? 지속적인 디스크 활동? 로그에 단서가 있나요?
리눅스~ 할 것이다사용 가능한 메모리를 모두 채우고 그대로 유지하는 것이 메모리를 적극적으로 지우고 나중에 다시 사용하는 것보다 더 저렴합니다. 정지된(또는 시작된 직후) 기계는 활발하게 사용되는 기계와 매우 다른 숫자를 제공합니다.