내 시스템에는 1GB의 물리적 RAM이 있습니다. 이제 free
다음과 같은 메모리 사용량이 표시됩니다.
total used free shared buffers cached
Mem: 1026360 863660 162700 0 0 50216
-/+ buffers/cache: 813444 212916
Swap: 5242876 500648 4742228
따라서 블록 캐시 외에 813MB가 사용됩니다. /proc/meminfo
(길이가 긴 이유로 하단에 게시하겠습니다) 283MB는 사용자 영역 프로세스( AnonPages
+ )에 매핑되고 127MB 는 Mapped
커널( Slab
++ )에서 사용된다고 알려줍니다.KernelStack
PageTables
그러나 아직 설명되지 않은 공간이 약 400MB 정도 있습니다. 시스템이 메모리를 사용하는 방식에 대한 내 개념이 정확합니까? 내 메모리의 절반이 어디에 사용되는지 알 수 있는 방법이 있나요?
MemTotal: 1026360 kB
MemFree: 193768 kB
Buffers: 0 kB
Cached: 28932 kB
SwapCached: 101208 kB
Active: 178816 kB
Inactive: 182476 kB
Active(anon): 167196 kB
Inactive(anon): 168184 kB
Active(file): 11620 kB
Inactive(file): 14292 kB
Unevictable: 9848 kB
Mlocked: 9848 kB
SwapTotal: 5242876 kB
SwapFree: 4739272 kB
Dirty: 24 kB
Writeback: 0 kB
AnonPages: 268280 kB
Mapped: 14832 kB
Shmem: 280 kB
Slab: 111828 kB
SReclaimable: 27432 kB
SUnreclaim: 84396 kB
KernelStack: 2280 kB
PageTables: 13200 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 5756056 kB
Committed_AS: 1506036 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 145004 kB
VmallocChunk: 34359581976 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 79808 kB
DirectMap2M: 968704 kB
답변1
나는 약간의 awk를 사용하여 상주 세트 크기(RSS)를 기반으로 상위 10명의 메모리 사용자를 얻었습니다. RSS는 서버 RAM의 프로세스가 실제로 사용하는 메모리 양입니다(스왑 페이지 없음).
awk '{ printf "%8d %8d %8d pid:%-5d comm:%-10s state:%c\n",$14,$15,$24,$1,$2,$3; }' /proc/[1-9]*/stat |sort -rn -k3 |sed 10q
그렇지 않은 경우 sed 10q
전체 프로세스 목록이 내림차순으로 표시됩니다.
RSS는 출력의 세 번째 열입니다. 에 따라 커널의 필드 번호 지정을 수정해야 할 수도 있습니다 man 5 proc
.