htop
및 에 따르면 free
현재 보고 있는 컴퓨터의 RAM 용량은 6631/11907MB입니다. 이는 사용 가능한 RAM의 약 절반입니다. 그런데 MEM% 기준으로 정렬해보면 가장 많이 사용 top
되는 htop
메모리는 MEM이 0.8%인 Xorg이다. gnome-settings
0.3%를 사용하고, 다른 몇몇은 0.1%를 사용합니다. 이 비율을 합하면 50% 미만이 됩니다.
무엇이 메모리의 ~50%를 사용하고 있는지 어떻게 알 수 있으며 왜 top/htop에 이 메모리 사용량이 표시되지 않습니까?
출력 free -mt
:
total used free shared buffers cached
Mem: 11907 10660 1246 0 650 3379
-/+ buffers/cache: 6629 5277
Swap: 3999 26 3973
Total: 15907 10686 5220
편집하다: 요청대로...
가상 머신 통계 1 5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 26640 312180 695976 4229988 0 0 4 34 0 1 1 1 96 2 0
0 0 26640 312032 695976 4230016 0 0 0 0 157 191 0 0 100 0 0
0 0 26640 312156 695976 4230016 0 0 0 0 158 270 0 0 100 0 0
0 0 26640 312156 695976 4230016 0 0 0 0 128 189 0 0 100 0 0
0 0 26640 312156 695976 4230016 0 0 0 0 212 308 0 0 100 0 0
고양이/proc/meminfo
MemTotal: 12192876 kB
MemFree: 311644 kB
Buffers: 695984 kB
Cached: 4230016 kB
SwapCached: 7684 kB
Active: 1378792 kB
Inactive: 3656424 kB
Active(anon): 2192 kB
Inactive(anon): 108500 kB
Active(file): 1376600 kB
Inactive(file): 3547924 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 4095992 kB
SwapFree: 4069352 kB
Dirty: 28 kB
Writeback: 0 kB
AnonPages: 102412 kB
Mapped: 52116 kB
Shmem: 1456 kB
Slab: 5584084 kB
SReclaimable: 4402760 kB
SUnreclaim: 1181324 kB
KernelStack: 3176 kB
PageTables: 17852 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 10192428 kB
Committed_AS: 678004 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 185496 kB
VmallocChunk: 34359540220 kB
HardwareCorrupted: 0 kB
AnonHugePages: 28672 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 5177316 kB
DirectMap2M: 7403520 kB
DirectMap1G: 0 kB
답변1
문제는 여러 프로세스 간에 공유되기 때문에 많은 유틸리티에서 고려하지 않는 공유 메모리로 인해 발생할 수 있습니다. smemstat
유틸리티("공유 메모리의 비례 메모리 사용량 보고")를 사용하여 이를 확인할 수 있습니다 .
편집: 커널은 메모리의 많은 부분을 차지할 수도 있습니다(출력 used
값 에 포함 free
). 내용을 살펴보세요 /proc/meminfo
. ~에 따르면Linux에서 "손실된" 메모리 사용량 추적, Slab + Shmem + KernelStack + PageTables는 커널 공간을 제공합니다. 일반적으로 Slab은 꽤 중요한 것 같습니다.
다른 사용자에게도 비슷한 문제가 있습니다.
답변2
이 차이에 대해 두 가지 가능한 설명이 있습니다.
- 당신은 가상 머신에 있고 공유 메모리를 가지고 있습니다.
- 당신은 많은 것을 가지고 있습니다.많은프로세스는 매우 적은 양의 메모리를 소비하지만 집계되면 훨씬 더 많은 메모리를 소비합니다.
첫 번째는 결정하기 쉽고, 두 번째도... 똑같습니다. 하지만 주의할 점은 RAM을 사용하는 여러 프로세스를 찾아야 한다는 것입니다. 추신, uniq 및 sort가 도움이 될 수 있습니다.
➜ ~ ps axco command | uniq -c | sort -nr | head
2 xdg-open <defunct>
2 mplayer
1 zsh
1 zsh
1 zsh
1 x-session-manag
1 xprop
1 Xorg
1 writeback
1 watchdog/0
이를 통해 악의적인 프로세스가 자신을 호출하여 메모리를 사용하는지 확인할 수 있습니다.
답변3
이미 자유 명령으로 답을 얻었으므로,
free -m
-/+ buffers/cache: 6629 5277
이것은 필요한 행이므로 이 값은 사용된 실제 메모리이므로 실제 사용 가능한 메모리는 5277이므로 볼 수 top
없습니다 .htop
비어 있는 첫 번째 필드:
total used free shared buffers cached
Mem: 11907 10660 1246 0 650 3379
실제로 운영체제(커널)에 의해 예약되어 있고 버퍼 없이는 실제로 사용되지 않는 메모리를 보여주며, vmstat
더 많은 정보와 mdb -k
모듈을 확인하여 커널이 사용하는 메모리를 확인하고 명령어의 값을 이용하여 계산할 수 있습니다 free
.
이미 지적했듯이 메모리는 커널에 의해 예약(캐시)되며 일부 응용 프로그램이 요청할 때까지 그대로 유지됩니다. 그렇기 때문에 어떤 프로세스가 이를 사용하는지 확인할 수 없습니다.
출력을 제공 cat /proc/meminfo
하고 캐시 필드를 제공하십시오. 이것이 실제로 커널이 사용하는 것입니다!
답변4
1246MB의 완전히 사용 가능한 메모리가 있지만 표시되는 5277MB에는 "캐시" 메모리가 없습니다. 이는 운영 체제가 속도를 높이기 위해 메모리에 무언가를 넣었음을 의미합니다. "중고"라고 부르지만(즉, "무료" 전화번호는 1246입니다), 필요할 경우 실제로 사용할 수 있습니다.
이 답변을 참조하세요:`free`: 출력 형식