연구 후 여전히 RAM 사용량 모니터링에 혼란


10

내가 겪었 이 문서 귀하의 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

이 기사의 설명 그래픽에 따르면 이는 130MB의 사용 된 RAM과 459MB의 사용 가능한 RAM이 있음을 의미하며 이는 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) 메모리에 의해 정렬 위쪽의 명령어는 아니다 m 이있어, M . # 2) 모든 프로세스를 보려면 ** ps ax -o command, rss **; 당신이 달리는 것은 당신의 것을 보여줍니다.
tink

또한 우리의 출력을 업데이트하십시오cat /proc/meminfo
Rahul Patil


@tink, 그 설명에 감사드립니다. 나는 ps ax -o rss | awk '{ sum+=$1} END {print sum}'지금 그리고 153156을 시도했다.
Jonah

@RahulPatil, OP가 업데이트되었습니다. 실행중인 프로세스는 원래 숫자와 약간 다를 수 있지만 그리 멀지 않아야합니다. 또한, 내가 얻은 결과는 주석 위의 주석에서 얻은 결과와 일치하지 않는 것 같습니다. 그것들은 불과 몇 분 간격으로 촬영되었습니다.
요나

답변:


8

당신은 메모리 개념을 이해해야합니다

/ 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

위의 스크립트로 확인하여 올바르게 표시되는지 알려주십시오.


고마워 라훌 마지막 질문입니다. free -m사용자 당 사용 된 메모리를 볼 수있는 방법을 제공하지 않기 때문에 특정 사용자가 얼마나 많은 실제 RAM을 사용하고 있는지 확인하는 정확한 방법은 무엇입니까? 예를 들어 공유 서버에서 자신의 메모리 사용을 모니터링 할 때 나타납니다.
요나

@Jonah 내가 업데이트했습니다 .. 확인하고 알려주십시오
Rahul Patil

그 스크립트는 예상대로 작동하지 않습니다 ..하지만 곧 업데이트하려고합니다
Rahul Patil

@Jonah 내 답변을 수락 주셔서 감사합니다 ..하지만 MichaelHampton 주셔서 감사합니다 ...
Rahul Patil

2

좋은 답변 @RahulPatil.

ps 또는 top에 대해 고려해야 할 또 다른 사항은 다음과 같습니다.

이 도구 [exmap]는 여러 응용 프로그램에서 사용중인 공유 라이브러리를 고려하기 때문에 ps 또는 top보다 정확합니다. 예를 들어 두 응용 프로그램이 1MB의 메모리를 차지하는 동일한 공유 라이브러리를 사용하는 경우 ps는 1MB의 추가 메모리를 사용하는 두 응용 프로그램을 모두 표시하지만 exmap은 500KB를 사용하는 각 응용 프로그램을 더 정확하게 표시합니다. 이러한 더 높은 정확도는 응용 프로그램간에 공유되는 라이브러리를 매우 많이 사용하는 KDE 및 GNOME과 같은 데스크탑 환경을 평가할 때 특히 중요합니다.

통해 IBM / 한국 developerWorks / linux_memory

귀하의 질문에 헤드리스 서버가 언급되어 있으므로 실제로 이중보고 상위 또는 PS의 양이 확실하지 않습니다.


0

우리가 "물론"그런 것이기 때문에 명백한 것을 간과하고 있을지도 모른다.

Jonah, 내가 틀렸다면 용서하십시오. 그러나 귀하의 질문은 CPU 사용량, 특히 이러한 모든 값이 일반적으로 초마다 크게 다르다는 것을 깨닫지 못했을 것 같습니다.

새로운 프로세스가 시작 되 자마자 CPU 사용량이 한 자릿수에서 100 %로 즉시 전환 될 수 있지만 50 % 미만의 범위로 신속하게 (희망적으로) 되돌아갑니다.

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

와 같이 사용량을 표시하기 위해 실행하는 프로세스 top가 CPU 및 메모리도 사용 한다는 점도 고려하십시오 . CPU 사용량을 지속적으로보고하기 위해 루프가있는 스크립트를 작성한 경우, 사용 자체를보고하는 작업 ( sleep 지연이 발생 하지 않음 )이 모든 CPU를 사용 하므로 거의 항상 100 %를 표시 합니다.


Doc, 생각해 주셔서 감사합니다. 그러나 이것은 문제가 아닙니다
Jonah
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.