나는 경험했다이 기사, RAM 사용량을 확인하는 다양한 방법을 설명합니다. 그러나 서로 다른 접근 방식을 조화시킬 수 없으며 어느 것이 올바른지 알 수 없습니다.
처음 로그인을 하면 이런 화면이 나옵니다.
System information as of Sun Apr 28 21:46:58 UTC 2013
System load: 0.0 Processes: 76
Usage of /: 15.6% of 7.87GB Users logged in: 1
Memory usage: 41% IP address for eth0:
Swap usage: 0%
이는 내가 RAM의 41%를 사용하고 있음을 보여줍니다. 서버가 많은 작업을 수행하지 않기 때문에 상당히 높은 것 같습니다. 아니면 이 숫자가 RAM이 아닌 다른 것을 나타냅니까?
free -m
다음으로 이 방법을 시도해 보겠습니다 .
ubuntu@ip-:~$ free -m
total used free shared buffers cached
Mem: 590 513 76 0 67 315
-/+ buffers/cache: 130 459
Swap: 0 0 0
기사의 설명 그래프에 따르면 이는 사용된 RAM이 130MB이고 여유 RAM이 459MB이며 이는 RAM의 약 22%를 사용하고 있음을 나타냅니다.
다음으로 다음을 실행합니다 top
.
top - 22:14:48 up 195 days, 21:30, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 77 total, 1 running, 76 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.3%us, 0.3%sy, 0.0%ni, 97.7%id, 0.7%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 604376k total, 525692k used, 78684k free, 69124k buffers
Swap: 0k total, 0k used, 0k free, 322740k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 24332 1864 976 S 0.0 0.3 0:08.75 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
요약에 따르면 총 604M 중 525MG를 사용하고 있지만 "m" 대화형 명령을 사용하여 최상위 메모리별로 정렬하면 최상위 프로세스가 메모리의 0.3%만 사용하기 때문에 가장 혼란스럽습니다. ? ?
마지막으로 이 ps
명령은 메모리 사용량이 거의 없는 것으로 보입니다.
root@ip-:/home/ubuntu# ps -o command,rss
COMMAND RSS
ps -o command,rss 788
sudo su root 1764
su root 1404
bash 2132
나는 이러한 명백한 갈등을 야기하는 내가 갖고 있는 오해를 누군가가 바로잡을 수 있기를 바랍니다.
감사해요!
편집자 라훌
출력 cat /proc/meminfo
:
MemTotal: 604376 kB
MemFree: 157564 kB
Buffers: 49640 kB
Cached: 231376 kB
SwapCached: 0 kB
Active: 290040 kB
Inactive: 97772 kB
Active(anon): 107672 kB
Inactive(anon): 4844 kB
Active(file): 182368 kB
Inactive(file): 92928 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 52 kB
Writeback: 0 kB
AnonPages: 106836 kB
Mapped: 22920 kB
Shmem: 5712 kB
Slab: 42032 kB
SReclaimable: 34016 kB
SUnreclaim: 8016 kB
KernelStack: 688 kB
PageTables: 3584 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 302188 kB
Committed_AS: 242768 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 7152 kB
VmallocChunk: 34359729008 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 637952 kB
DirectMap2M: 0 kB
답변1
메모리 개념을 이해하면 됩니다.
/proc/meminfo의 출력에 따라 다음 사항만 참고하면 됩니다.
완충기:- 버퍼는 아직 디스크에 "기록"되지 않은 것입니다. 디스크 블록 캐싱에 할당된 RAM의 양을 나타냅니다. "캐시됨"은 "버퍼"와 유사하지만 이번에는 파일에서 읽은 페이지를 캐시합니다.
은닉처:- 캐시는 디스크에서 "읽고" 나중에 사용하기 위해 저장하는 것입니다. 일반적으로 캐시 영역은 응용 프로그램에 더 많은 메모리가 필요할 경우 점차적으로 줄어든다는 점에서 또 다른 "사용 가능한" RAM으로 생각할 수 있습니다.
"버퍼"와 "캐시됨"이 모두 시스템 캐시의 크기를 나타낸다는 점을 이해하면 충분합니다. 내부 Linux 커널 메커니즘의 요구 사항에 따라 동적으로 확장되거나 축소됩니다.
웹 호스팅에서는 다음 cmd를 사용하여 캐시를 지웁니다. (주로 cron에서 구성):
sync && echo 3 > /proc/sys/vm/drop_caches
인용하다협회
사용자당 메모리 사용량이라는 또 다른 요구 사항을 편집하세요.
#!/bin/bash
total_mem=0
printf "%-10s%-10s\n" User MemUsage
while read u m
do
[[ $old_user != $u ]] && { printf "%-10s%-0.1f\n" $old_user $total_mem; total_mem=0; }
total_mem=$(echo $m + $total_mem | bc);
old_user=$u
done < <(ps --no-headers -eo user,%mem| sort -k1)
#--EOF
위의 스크립트를 확인하시고 올바르게 표시되는지 알려주세요.
답변2
훌륭한 답변 @RahulPatil.
ps 또는 top에 대해 고려해야 할 또 다른 사항은 다음과 같습니다.
이 도구 [exmap]은 여러 응용 프로그램에서 사용되는 공유 라이브러리를 고려하므로 ps 또는 top보다 더 정확합니다. 예를 들어 두 애플리케이션이 1MB의 메모리를 차지하는 동일한 공유 라이브러리를 사용하는 경우 ps는 두 애플리케이션 모두 1MB의 추가 메모리를 사용하는 것으로 표시하는 반면 exmap은 500KB를 사용하는 각 애플리케이션을 더 정확하게 표시합니다. 이러한 높은 정확성은 응용 프로그램 간에 공유되는 라이브러리를 많이 사용하는 KDE 및 GNOME과 같은 데스크탑 환경을 평가할 때 특히 중요합니다.
통과하다ibm/developerworks/linux_memory
귀하의 질문은 헤드리스 서버와 관련되어 있으므로 top 또는 ps가 실제로 얼마나 이중 보고를 하는지 잘 모르겠습니다.
답변3
우리 대부분이 “당연히 여기는” 것이기 때문에 명백한 것을 간과하고 있지 않을까 걱정됩니다.
Jonah, 제가 틀렸다면 용서해주세요. 하지만 귀하의 질문은 이러한 모든 값, 특히 CPU 사용량이 시간이 지남에 따라 많이 변하는 경우가 많다는 사실을 깨닫지 못할 수도 있는 것 같습니다.
새 프로세스가 시작되면 CPU 사용량이 즉시 한 자릿수에서 100%로 점프할 수 있지만 곧 (희망적으로) 50% 미만 범위로 되돌아갑니다.
메모리 사용량은 천천히 변화하지만 Linux는 디스크 액세스를 "캐시"하는 프로세스를 실행하여 적극적으로 사용되지 않는 메모리를 사용하려고 시도합니다. 예를 들어, 대용량 파일의 나머지 부분을 읽는 등 다음에 디스크에서 읽어야 할 내용을 예측하고 이를 캐시에 미리 로드합니다. 일부 메모리 사용량 값에는 프로세스에서 사용하는 메모리와 캐싱에 사용되는 메모리가 포함됩니다. 한동안 실행된 시스템에서는 두 가지를 합하면 최대 80-90% 이상이 될 수 있습니다.
또한 사용량을 표시하기 위해 실행하는 프로세스(예:) top
도 CPU와 메모리를 사용한다는 점을 고려하세요. 지속적으로 CPU 사용량을 보고하는 루프가 포함된 스크립트를 작성하는 경우 사용량 보고 작업 자체( sleep
일부 대기 시간 없음)가 모든 CPU를 사용하기 때문에 거의 항상 100%로 표시됩니다.