조사한 후에도 RAM 사용량 모니터링에 대해 여전히 혼란스러워함

조사한 후에도 RAM 사용량 모니터링에 대해 여전히 혼란스러워함

나는 겪었다이 기사, 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

나는 그것이 우리 대부분에게 "당연한" 일이기 때문에 우리가 명백한 것을 간과하고 있지 않을까 걱정됩니다.

조나, 제가 틀렸다면 용서해주세요. 하지만 귀하의 질문은 이러한 모든 값, 특히 CPU 사용량이 일반적으로 매 초마다 꽤 많이 달라진다는 사실을 깨닫지 못한 것처럼 들립니다.

CPU 사용량은 새 프로세스가 시작되면 즉시 한 자릿수에서 100%로 올라갈 수 있지만 신속하게(희망적으로) 50% 미만 범위로 되돌아갑니다.

메모리 사용량은 더 느리게 변화하지만 Linux는 디스크 액세스를 "캐싱"하기 위한 프로세스를 실행하여 활성 사용되지 않는 메모리를 사용하려고 합니다. 예를 들어, 대용량 파일의 일부를 읽은 후 나머지 부분과 같이 다음에 디스크에서 읽어야 할 내용을 예측하고 이를 캐시에 미리 로드하려고 시도합니다. 일부 메모리 사용량 값에는 프로세스에서 사용하는 메모리와 캐싱에 사용되는 메모리가 모두 포함됩니다. 한동안 실행된 시스템에서 두 가지를 합치면 아마도 80-90% 이상이 될 것입니다.

와 같이 사용량을 표시하기 위해 실행하는 프로세스도 topCPU와 메모리를 사용한다는 점도 고려하세요. CPU 사용량을 지속적으로 보고하는 루프가 포함된 스크립트를 작성한 경우 사용량 자체를 보고하는 작업(지연 없이 sleep )이 모든 CPU를 사용하기 때문에 거의 항상 100%로 표시됩니다.

관련 정보