응용 프로그램 또는 프로세스의 실제 메모리 사용량을 측정하는 방법은 무엇입니까?


712

이 질문은 여기서 자세히 다루고 있습니다 .

Linux에서 애플리케이션 또는 프로세스의 메모리 사용량을 어떻게 측정합니까?

Linux 에서 메모리 사용 이해 의 블로그 기사 ps에서이 의도에 사용하는 정확한 도구는 아닙니다.

ps"잘못된"

어떻게 보느냐에 따라 ps프로세스의 실제 메모리 사용량을보고하지 않습니다. 실제로하는 것은 각 프로세스가 실행중인 유일한 프로세스 인 경우 각 프로세스가 차지하는 실제 메모리 양을 보여주는 것 입니다. 물론, 일반적인 리눅스 머신은 VSZ와 RSS 숫자로보고 한 수단 주어진 시간에 실행 수십 프로세스가 ps거의 확실히 있습니다 잘못 .


6
이 질문은 아마도 현재 마이그레이션하기에는 너무 낡았다 고 말하고 있지만 아마도 오늘날 serverfault.com에 속할 것입니다. 실제로 그것을 닫고 싶지 않아 ...
thomasrutter

이 질문을 참조하십시오. stackoverflow.com/questions/669438/…
Bloodmoon

2
사실 ps이 곳, 가상 및 상주 메모리 번호를 보여줍니다 - 심지어 표시되지 않습니다 가상 이 할당 된 모든 단일 페이지 (결코 일어나지 않습니다)를 사용하는 과정은 이론적으로는 (결코 그렇게) 유일한 방법이었다 사용할 수있는 메모리의 최대 양입니다 페이지를 매핑하거나 매핑 해제하지 않았습니다. 반면 상주 많은 가상 메모리가 지금 실제에 매핑되는 방법을 보여줍니다. virt > usage > res그러나 일반적으로 64 비트 시스템 virt ~= res*10에서는 매우 광범위합니다.
Dima Tisnek

5
링크 된 기사에서 발췌 한 내용은 완전히 말도 안됩니다. RSS는 실제로 사용되는 실제 메모리이며 VSZ는 프로세스가 실행중인 유일한 프로세스 인 경우에도 실제 메모리 사용으로 변환되거나 변환되지 않을 수 있습니다.
David Schwartz 1

답변:


356

이와 ps유사한 도구를 사용하면 해당 프로세스에서 할당 한 메모리 페이지 만 얻을 수 있습니다. 이 번호는 맞지만,

  • 응용 프로그램에서 사용 된 실제 메모리 양을 반영하지 않고 예약 된 메모리 양만 반영합니다.

  • 예를 들어 여러 스레드 또는 동적으로 연결된 라이브러리를 사용하여 페이지를 공유하는 경우 오해의 소지가 있습니다.

응용 프로그램이 실제로 사용하는 메모리 양을 알고 싶다면 프로파일 러 내에서 실행해야합니다. 예를 들어, valgrind사용 된 메모리 양과 프로그램에서 발생 가능한 메모리 누수에 대한 통찰력을 제공 할 수 있습니다. valgrind의 힙 프로파일 러 도구는 'massif'입니다.

Massif는 힙 프로파일 러입니다. 프로그램 힙의 정기적 스냅 샷을 작성하여 자세한 힙 프로파일 링을 수행합니다. 가장 많은 메모리 할당을 담당하는 프로그램 부분에 대한 정보를 포함하여 시간 경과에 따른 힙 사용량을 보여주는 그래프를 생성합니다. 그래프는 가장 많은 메모리가 할당되는 위치를 결정하기위한 추가 정보가 포함 된 텍스트 또는 HTML 파일로 보완됩니다. Massif는 프로그램을 정상보다 약 20 배 느리게 실행합니다.

valgrind documentation에 설명 된대로 valgrind를 통해 프로그램을 실행해야합니다.

valgrind --tool=massif <executable> <arguments>

Massif는 메모리 사용량 스냅 샷 덤프 (예 :)를 씁니다 massif.out.12345. (1) 메모리 사용 타임 라인 (2) 각 스냅 샷에 대해 프로그램 메모리에서 할당 된 위치에 대한 레코드를 제공합니다. 이러한 파일을 분석하기위한 훌륭한 그래픽 도구는 massif-visualizer 입니다. 그러나 ms_printvalgrind와 함께 제공되는 간단한 텍스트 기반 도구는 이미 큰 도움이되었다는 것을 알았습니다 .

메모리 누수를 찾으려면 memcheckvalgrind 의 (기본) 도구를 사용하십시오 .


44
valgrind에 의해 생성 된 결과를 해석하기 위해 alleyoop을 추천 할 수 있습니다. 너무 화려하지는 않으며 누출 원을 찾기 위해 알아야 할 사항을 알려줍니다. 좋은 유틸리티 쌍.
Dan

6
항목 (a)가 맞습니다. malloc () 호출, new 등을 통해 응용 프로그램이 실제로 할당 한 메모리와 사용 된 페이지간에 차이가 있습니다. 상주 사용량은 페이지 된 메모리가 RAM에 상주하는 양을 보여줍니다.
jcoffland

63
이것은 실제로 valgrind를 사용하여 메모리 사용량을 얻는 방법을 알려주지 않습니까?
Matt Joiner

11
기본 valgrind 도구 인 memcheck는 메모리 누수를 감지하는 데 유용하지만 실제로는 메모리 프로파일 러가 아닙니다. 이를 위해 valgrind --tool = massif를 원합니다.
Todd는

3
@DavidSchwartz 나는 당신의 진술이 어떻게 내 모순되는지 모릅니다. 나는 당신이 내가 말하는 것을 실제로 읽는 것보다 "잘못되었다"는 당신의 요점에 너무 걱정하고 있다는 느낌이 듭니다. 여기서 필자의 요점은 RSS는 응용 프로그램의 실제 메모리 사용에 대한 부적절한 측정이며 마지막 두 문장에서 같은 점을 지적하고 있다는 것입니다. 실제로 RSS 축소를 처음 시작한 이유는 무엇이라고 생각 했습니까? 내가 언급 한 것과 똑같이 내가 틀렸다는 것을 증명하기 위해 나에게 철자를 쓰려고? 나에 대한 당신의 태도는 귀찮습니다.
ypnos

280

pmap 명령을 시도하십시오 :

sudo pmap -x <process pid>

45
sudo로 실행하거나 오류가 발생하지 않으며 메모리 소비가 없음을 보여줍니다.
Matt

22
OSX에는 존재하지 않습니다 (Google에서 온 사람 용)
jcollum

3
그것은 질문에 대한 완전한 답변입니다! 추신. 내 쉘에서 pmap은 sudo없이 프로세스를 읽을 수 있습니다.
MasterControlProgram

7
다시 OS X (겉보기 OP의 관심사 아님), vmmap (1)을 사용하여 유사한 데이터를 볼 수 있습니다
jrg

참고 :와 완전히 다른 답변을 제공합니다gnome-system-monitor
ribamar

190

확실히 말하기는 어렵지만 여기에 도움이 될 수있는 두 가지 "가까운"것이 있습니다.

$ ps aux 

가상 크기 (VSZ)를 제공합니다

/ proc 파일 시스템에서 자세한 통계를 얻을 수도 있습니다. /proc/$pid/status

가장 중요한 것은 VmSize이며, ps aux제공 하는 것에 가깝습니다 .

/ proc / 19420 $ 고양이 상태
이름 : 파이어 폭스
상태 : S (잠자기)
Tgid : 19420
d : 19420
PPid : 1
TracerPid : 0
UID : 1000 1000 1000 1000
Gid : 1000 1000 1000 1000
FD 크기 : 256
그룹 : 4 6 20 24 25 29 30 44 46107109115124 1000 
VmPeak : 222956 kB
크기 : 212520 kB
VmLck : 0 kB
VmHWM : 127912 킬로바이트
VmRSS : 118768 kB
VmData : 170180 kB
VmStk : 228 kB
VmExe : 28kB
VmLib : 35424 kB
VmPTE : 184 kB
스레드 : 8
SigQ : 0/16382
SigPnd : 0000000000000000
ShdPnd : 0000000000000000
SigBlk : 0000000000000000
SigIgn : 0000000020001000
SigCgt : 000000018000442f
CapInh : 0000000000000000
CapPrm : 0000000000000000
CapEff : 0000000000000000
Cpus_allowed : 03
Mems_allowed : 1
voluntary_ctxt_switches : 63422
nonvoluntary_ctxt_switches : 7171


21
뭔가 빠졌습니까? 이 질문은 ps에보고 된 VSZ 및 RSS가 오해의 소지가 있다는 점을 고려하여 프로세스에 의한 메모리 사용량을 더 잘 측정하는 방법을 묻습니다. 귀하의 답변은 VSZ를 찾는 방법에 대해 자세히 설명합니다.
thomasrutter

16
@thomasrutter 예, 원래 질문이 누락되었습니다 (rev 1). 여러 번 편집되었으며 상당히 오래되었습니다 (2008). 원래 질문은 프로세스의 메모리 사용량을 측정하는 방법을 물었습니다. 하지만 구식 인 경우 질문과 답변을 자유롭게 편집하십시오. :)
DustinB

1
참고 :와 완전히 다른 답변을 제공합니다gnome-system-monitor
ribamar

131

최신 버전의 Linux에서는 smaps 하위 시스템을 사용하십시오 . 예를 들어 PID가 1234 인 프로세스의 경우 :

cat /proc/1234/smaps

이때 사용중인 메모리 양을 정확하게 알려줍니다. 더 중요한 것은 메모리를 개인용 및 공유로 나누므로 프로그램의 여러 인스턴스간에 공유되는 메모리를 포함하지 않고 프로그램 인스턴스 가 사용하는 메모리 양을 알 수 있습니다 .


내가 추측은 pmap그것에 간단한 인터페이스입니다.
ribamar

126

이것을 계산하는 쉬운 방법은 없습니다. 그러나 어떤 사람들은 좋은 답변을 얻으려고 노력했습니다.


nice는 깨끗한 메모리와 프로세스 목록을 출력합니다
Rubytastic

아주 똑똑한 그룹화로 아주 좋습니다.
Rohmer

네, 정말 좋습니다. 내가 발견 ps_memsmem예 동안, 최종 사용자의 측정에 매우 유용합니다. pmap의 매우 상세한 출력은 개발자를 대상으로합니다 ... 각 글꼴, 애드온, libs에 대한 Firefox의 메모리 사용량을 검색 할 수 있습니다. 모든 특급 감사합니다. @Bash, @thomasruther.
tuk0z

이것은 지금까지의 출력과 일치하는 유일한 것입니다gnome-system-monitor
ribamar

110

프로세스 당 USS 및 PSS를 계산하는 ps 의 대안 인 smem을 사용하십시오 . 당신이 원하는 것은 아마도 PSS 일 것입니다.

  • USS- 고유 세트 크기. 이것은 그 과정에 고유 한 비공유 메모리의 양입니다 (라고 생각 U 에 대한 고유의 메모리). 공유 메모리는 포함되지 않습니다. 따라서이 의지 에 따라 공유 메모리를 무시하려는 경우 -report 메모리의 양 프로세스가 사용하는,하지만 도움이됩니다.

  • PSS- 비례 설정 크기. 이것이 당신이 원하는 것입니다. 공유 메모리의 비율을 해당 메모리를 공유하는 프로세스 수로 나눈 고유 메모리 (USS)를 더합니다. 따라서 프로세스 당 실제 실제 메모리 사용량을 정확하게 표현할 수 있습니다. 공유 메모리는 실제로 공유로 표시됩니다. P실제 메모리를 위한 것이라고 생각하십시오 .

ps 및 기타 유틸리티에서 보고 한 RSS와 비교하는 방법 :

  • RSS- 상주 세트 크기. 각 프로세스에서 사용하는 공유 메모리와 비공유 메모리의 양입니다. 모든 프로세스의 메모리를 공유하는 경우,이 것 이상 같은 공유 메모리 번 이상 계산되기 때문에, 실제로 사용되는 메모리의 양을 -report - 서로 다른 프로세스가 공유 같은 메모리에 다시 나타나지. 따라서 특히 높은 메모리 프로세스에 많은 포크가있는 경우 (아파치 또는 PHP (fastcgi / FPM) 프로세스와 같은 서버에서 일반적으로) 많은 포크가있는 경우 상당히 신뢰할 수 없습니다.

주의 : smem은 파이 차트 등과 같은 그래프를 선택적으로 출력 할 수도 있습니다. IMO는 그 어느 것도 필요하지 않습니다. ps -A v를 사용할 수있는 것처럼 명령 행에서 사용하려면 python-matplotlib 권장 종속성을 설치할 필요가 없습니다.


2
RSS의 중요한 점 중 하나는 요즘 대부분의 응용 프로그램이 많은 코드 페이지를 공유한다는 것입니다. 모든 공유 라이브러리 (예 : libc 및 libstdc ++)는이를 사용하는 모든 프로세스에 대해 계산됩니다. 그리고 프로세스의 여러 인스턴스가 실행중인 경우 해당 코드가 모두 두 번 계산됩니다.
David C.

1
정확하게는 RSS가 프로세스 당 실제 물리적 메모리 측면에서 초과보고하는 이유입니다.
thomasrutter

3
smem은 내가 필요한 것입니다. 새 프로세스 인스턴스를 시작할 때마다 -t로 실행하면 각 인스턴스가 소비하는 메모리를 볼 수 있습니다. 크롬의 경우 : smem -t -P '/ 옵션 / 구글 / 크롬'
xtian

smem에 대한 설명서를 찾는 데 어려움을 겪고 있습니다. 기본적으로 바이트, 킬로바이트 또는 메가 바이트로 출력됩니까?
ZN13

4
TL; DR : USS = 프로세스가 종료되면 해제 될 실제 메모리의 양, PSS = 기존 프로세스가 종료되지 않을 경우이 프로세스가 시스템에서 필요로하는 실제 메모리의 양, RSS = 액세스 가능한 실제 메모리의 양 이 프로세스 (항상 배타적 액세스는 아님).
Mikko Rantalainen

95
ps -eo size,pid,user,command --sort -size | \
    awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' |\
    cut -d "" -f2 | cut -d "-" -f1

이것을 루트로 사용하면 각 프로세스별로 메모리 사용량에 대한 명확한 결과를 얻을 수 있습니다.

출력 예 :

     0.00 Mb COMMAND 
  1288.57 Mb /usr/lib/firefox
   821.68 Mb /usr/lib/chromium/chromium 
   762.82 Mb /usr/lib/chromium/chromium 
   588.36 Mb /usr/sbin/mysqld 
   547.55 Mb /usr/lib/chromium/chromium 
   523.92 Mb /usr/lib/tracker/tracker
   476.59 Mb /usr/lib/chromium/chromium 
   446.41 Mb /usr/bin/gnome
   421.62 Mb /usr/sbin/libvirtd 
   405.11 Mb /usr/lib/chromium/chromium 
   302.60 Mb /usr/lib/chromium/chromium 
   291.46 Mb /usr/lib/chromium/chromium 
   284.56 Mb /usr/lib/chromium/chromium 
   238.93 Mb /usr/lib/tracker/tracker
   223.21 Mb /usr/lib/chromium/chromium 
   197.99 Mb /usr/lib/chromium/chromium 
   194.07 Mb conky 
   191.92 Mb /usr/lib/chromium/chromium 
   190.72 Mb /usr/bin/mongod 
   169.06 Mb /usr/lib/chromium/chromium 
   155.11 Mb /usr/bin/gnome
   136.02 Mb /usr/lib/chromium/chromium 
   125.98 Mb /usr/lib/chromium/chromium 
   103.98 Mb /usr/lib/chromium/chromium 
    93.22 Mb /usr/lib/tracker/tracker
    89.21 Mb /usr/lib/gnome
    80.61 Mb /usr/bin/gnome
    77.73 Mb /usr/lib/evolution/evolution
    76.09 Mb /usr/lib/evolution/evolution
    72.21 Mb /usr/lib/gnome
    69.40 Mb /usr/lib/evolution/evolution
    68.84 Mb nautilus
    68.08 Mb zeitgeist
    60.97 Mb /usr/lib/tracker/tracker
    59.65 Mb /usr/lib/evolution/evolution
    57.68 Mb apt
    55.23 Mb /usr/lib/gnome
    53.61 Mb /usr/lib/evolution/evolution
    53.07 Mb /usr/lib/gnome
    52.83 Mb /usr/lib/gnome
    51.02 Mb /usr/lib/udisks2/udisksd 
    50.77 Mb /usr/lib/evolution/evolution
    50.53 Mb /usr/lib/gnome
    50.45 Mb /usr/lib/gvfs/gvfs
    50.36 Mb /usr/lib/packagekit/packagekitd 
    50.14 Mb /usr/lib/gvfs/gvfs
    48.95 Mb /usr/bin/Xwayland :1024 
    46.21 Mb /usr/bin/gnome
    42.43 Mb /usr/bin/zeitgeist
    42.29 Mb /usr/lib/gnome
    41.97 Mb /usr/lib/gnome
    41.64 Mb /usr/lib/gvfs/gvfsd
    41.63 Mb /usr/lib/gvfs/gvfsd
    41.55 Mb /usr/lib/gvfs/gvfsd
    41.48 Mb /usr/lib/gvfs/gvfsd
    39.87 Mb /usr/bin/python /usr/bin/chrome
    37.45 Mb /usr/lib/xorg/Xorg vt2 
    36.62 Mb /usr/sbin/NetworkManager 
    35.63 Mb /usr/lib/caribou/caribou 
    34.79 Mb /usr/lib/tracker/tracker
    33.88 Mb /usr/sbin/ModemManager 
    33.77 Mb /usr/lib/gnome
    33.61 Mb /usr/lib/upower/upowerd 
    33.53 Mb /usr/sbin/gdm3 
    33.37 Mb /usr/lib/gvfs/gvfsd
    33.36 Mb /usr/lib/gvfs/gvfs
    33.23 Mb /usr/lib/gvfs/gvfs
    33.15 Mb /usr/lib/at
    33.15 Mb /usr/lib/at
    30.03 Mb /usr/lib/colord/colord 
    29.62 Mb /usr/lib/apt/methods/https 
    28.06 Mb /usr/lib/zeitgeist/zeitgeist
    27.29 Mb /usr/lib/policykit
    25.55 Mb /usr/lib/gvfs/gvfs
    25.55 Mb /usr/lib/gvfs/gvfs
    25.23 Mb /usr/lib/accountsservice/accounts
    25.18 Mb /usr/lib/gvfs/gvfsd 
    25.15 Mb /usr/lib/gvfs/gvfs
    25.15 Mb /usr/lib/gvfs/gvfs
    25.12 Mb /usr/lib/gvfs/gvfs
    25.10 Mb /usr/lib/gnome
    25.10 Mb /usr/lib/gnome
    25.07 Mb /usr/lib/gvfs/gvfsd 
    24.99 Mb /usr/lib/gvfs/gvfs
    23.26 Mb /usr/lib/chromium/chromium 
    22.09 Mb /usr/bin/pulseaudio 
    19.01 Mb /usr/bin/pulseaudio 
    18.62 Mb (sd
    18.46 Mb (sd
    18.30 Mb /sbin/init 
    18.17 Mb /usr/sbin/rsyslogd 
    17.50 Mb gdm
    17.42 Mb gdm
    17.09 Mb /usr/lib/dconf/dconf
    17.09 Mb /usr/lib/at
    17.06 Mb /usr/lib/gvfs/gvfsd
    16.98 Mb /usr/lib/at
    16.91 Mb /usr/lib/gdm3/gdm
    16.86 Mb /usr/lib/gvfs/gvfsd
    16.86 Mb /usr/lib/gdm3/gdm
    16.85 Mb /usr/lib/dconf/dconf
    16.85 Mb /usr/lib/dconf/dconf
    16.73 Mb /usr/lib/rtkit/rtkit
    16.69 Mb /lib/systemd/systemd
    13.13 Mb /usr/lib/chromium/chromium 
    13.13 Mb /usr/lib/chromium/chromium 
    10.92 Mb anydesk 
     8.54 Mb /sbin/lvmetad 
     7.43 Mb /usr/sbin/apache2 
     6.82 Mb /usr/sbin/apache2 
     6.77 Mb /usr/sbin/apache2 
     6.73 Mb /usr/sbin/apache2 
     6.66 Mb /usr/sbin/apache2 
     6.64 Mb /usr/sbin/apache2 
     6.63 Mb /usr/sbin/apache2 
     6.62 Mb /usr/sbin/apache2 
     6.51 Mb /usr/sbin/apache2 
     6.25 Mb /usr/sbin/apache2 
     6.22 Mb /usr/sbin/apache2 
     3.92 Mb bash 
     3.14 Mb bash 
     2.97 Mb bash 
     2.95 Mb bash 
     2.93 Mb bash 
     2.91 Mb bash 
     2.86 Mb bash 
     2.86 Mb bash 
     2.86 Mb bash 
     2.84 Mb bash 
     2.84 Mb bash 
     2.45 Mb /lib/systemd/systemd
     2.30 Mb (sd
     2.28 Mb /usr/bin/dbus
     1.84 Mb /usr/bin/dbus
     1.46 Mb ps 
     1.21 Mb openvpn hackthebox.ovpn 
     1.16 Mb /sbin/dhclient 
     1.16 Mb /sbin/dhclient 
     1.09 Mb /lib/systemd/systemd 
     0.98 Mb /sbin/mount.ntfs /dev/sda3 /media/n0bit4/Data 
     0.97 Mb /lib/systemd/systemd 
     0.96 Mb /lib/systemd/systemd 
     0.89 Mb /usr/sbin/smartd 
     0.77 Mb /usr/bin/dbus
     0.76 Mb su 
     0.76 Mb su 
     0.76 Mb su 
     0.76 Mb su 
     0.76 Mb su 
     0.76 Mb su 
     0.75 Mb sudo su 
     0.75 Mb sudo su 
     0.75 Mb sudo su 
     0.75 Mb sudo su 
     0.75 Mb sudo su 
     0.75 Mb sudo su 
     0.74 Mb /usr/bin/dbus
     0.71 Mb /usr/lib/apt/methods/http 
     0.68 Mb /bin/bash /usr/bin/mysqld_safe 
     0.68 Mb /sbin/wpa_supplicant 
     0.66 Mb /usr/bin/dbus
     0.61 Mb /lib/systemd/systemd
     0.54 Mb /usr/bin/dbus
     0.46 Mb /usr/sbin/cron 
     0.45 Mb /usr/sbin/irqbalance 
     0.43 Mb logger 
     0.41 Mb awk { hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" } 
     0.40 Mb /usr/bin/ssh
     0.34 Mb /usr/lib/chromium/chrome
     0.32 Mb cut 
     0.32 Mb cut 
     0.00 Mb [kthreadd] 
     0.00 Mb [ksoftirqd/0] 
     0.00 Mb [kworker/0:0H] 
     0.00 Mb [rcu_sched] 
     0.00 Mb [rcu_bh] 
     0.00 Mb [migration/0] 
     0.00 Mb [lru
     0.00 Mb [watchdog/0] 
     0.00 Mb [cpuhp/0] 
     0.00 Mb [cpuhp/1] 
     0.00 Mb [watchdog/1] 
     0.00 Mb [migration/1] 
     0.00 Mb [ksoftirqd/1] 
     0.00 Mb [kworker/1:0H] 
     0.00 Mb [cpuhp/2] 
     0.00 Mb [watchdog/2] 
     0.00 Mb [migration/2] 
     0.00 Mb [ksoftirqd/2] 
     0.00 Mb [kworker/2:0H] 
     0.00 Mb [cpuhp/3] 
     0.00 Mb [watchdog/3] 
     0.00 Mb [migration/3] 
     0.00 Mb [ksoftirqd/3] 
     0.00 Mb [kworker/3:0H] 
     0.00 Mb [kdevtmpfs] 
     0.00 Mb [netns] 
     0.00 Mb [khungtaskd] 
     0.00 Mb [oom_reaper] 
     0.00 Mb [writeback] 
     0.00 Mb [kcompactd0] 
     0.00 Mb [ksmd] 
     0.00 Mb [khugepaged] 
     0.00 Mb [crypto] 
     0.00 Mb [kintegrityd] 
     0.00 Mb [bioset] 
     0.00 Mb [kblockd] 
     0.00 Mb [devfreq_wq] 
     0.00 Mb [watchdogd] 
     0.00 Mb [kswapd0] 
     0.00 Mb [vmstat] 
     0.00 Mb [kthrotld] 
     0.00 Mb [ipv6_addrconf] 
     0.00 Mb [acpi_thermal_pm] 
     0.00 Mb [ata_sff] 
     0.00 Mb [scsi_eh_0] 
     0.00 Mb [scsi_tmf_0] 
     0.00 Mb [scsi_eh_1] 
     0.00 Mb [scsi_tmf_1] 
     0.00 Mb [scsi_eh_2] 
     0.00 Mb [scsi_tmf_2] 
     0.00 Mb [scsi_eh_3] 
     0.00 Mb [scsi_tmf_3] 
     0.00 Mb [scsi_eh_4] 
     0.00 Mb [scsi_tmf_4] 
     0.00 Mb [scsi_eh_5] 
     0.00 Mb [scsi_tmf_5] 
     0.00 Mb [bioset] 
     0.00 Mb [kworker/1:1H] 
     0.00 Mb [kworker/3:1H] 
     0.00 Mb [kworker/0:1H] 
     0.00 Mb [kdmflush] 
     0.00 Mb [bioset] 
     0.00 Mb [kdmflush] 
     0.00 Mb [bioset] 
     0.00 Mb [jbd2/sda5
     0.00 Mb [ext4
     0.00 Mb [kworker/2:1H] 
     0.00 Mb [kauditd] 
     0.00 Mb [bioset] 
     0.00 Mb [drbd
     0.00 Mb [irq/27
     0.00 Mb [i915/signal:0] 
     0.00 Mb [i915/signal:1] 
     0.00 Mb [i915/signal:2] 
     0.00 Mb [ttm_swap] 
     0.00 Mb [cfg80211] 
     0.00 Mb [kworker/u17:0] 
     0.00 Mb [hci0] 
     0.00 Mb [hci0] 
     0.00 Mb [kworker/u17:1] 
     0.00 Mb [iprt
     0.00 Mb [iprt
     0.00 Mb [kworker/1:0] 
     0.00 Mb [kworker/3:0] 
     0.00 Mb [kworker/0:0] 
     0.00 Mb [kworker/2:0] 
     0.00 Mb [kworker/u16:0] 
     0.00 Mb [kworker/u16:2] 
     0.00 Mb [kworker/3:2] 
     0.00 Mb [kworker/2:1] 
     0.00 Mb [kworker/1:2] 
     0.00 Mb [kworker/0:2] 
     0.00 Mb [kworker/2:2] 
     0.00 Mb [kworker/0:1] 
     0.00 Mb [scsi_eh_6] 
     0.00 Mb [scsi_tmf_6] 
     0.00 Mb [usb
     0.00 Mb [bioset] 
     0.00 Mb [kworker/3:1] 
     0.00 Mb [kworker/u16:1] 

1
메모리를 25 % 이상 사용하는 프로세스 만 사용하도록 프로세스를 갖도록 목록을 필터링하는 방법은 무엇입니까? PHPEclipse 디버거를 사용할 때 Chrome 브라우저와 같은 프로세스가 실행되는 것을 보려고합니다.
Stephane

그 필터는 대단 할 것입니다
aleix

1
최대한 빨리 게시하겠습니다.
Lokendra Singh Rawat

2
큰! 그러나 루프는 x=2pid와 사용자를 출력하기 위해 시작해야합니다 .
Boris Brodski

70

무엇에 대해 time?

아니 배쉬 내장 time하지만 당신이 찾을 수있는 하나의 which time예를 들어,/usr/bin/time

간단한 내용은 다음과 같습니다 ls.

$ /usr/bin/time --verbose ls
(...)
Command being timed: "ls"
User time (seconds): 0.00
System time (seconds): 0.00
Percent of CPU this job got: 0%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 2372
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 1
Minor (reclaiming a frame) page faults: 121
Voluntary context switches: 2
Involuntary context switches: 9
Swaps: 0
File system inputs: 256
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0

나도 또한. powercron.eu에서 작업을 프로파일 링하는 데 사용하는 방식입니다. :)
Moonchild

5
brew install gnu-time그런 다음 gtimemacOS 를 사용하는 경우 사용 하십시오.
Nobu

4
단점 : 프로세스가 실행을 완료 할 때까지 결과를 얻지 못합니다. 실행중인 프로세스의 실시간 모니터링에는 사용할 수 없습니다.
Makesh

는 / usr / 빈 / 시간 -f '% M'
infomaniac

1
\ time을 사용하여 호출 할 수도 있습니다 (쉘의 내부 시간 사용을 방지하기 위해 백 슬래시 포함).
Raúl Salinas-Monteagudo

39

다음은 도구와 문제에 대한 훌륭한 요약입니다. archive.org 링크

더 많은 개발자들이 실제로 읽을 수 있도록 인용하겠습니다.

전체 시스템의 메모리 사용량을 분석하거나 힙 사용량이 아닌 하나의 응용 프로그램의 메모리 사용량을 철저히 분석하려면 exmap을 사용 하십시오 . 전체 시스템 분석의 경우 가장 효과적인 사용 프로세스를 찾고 실제로 가장 많은 메모리를 사용하고 쓰기 가능한 사용이 가장 높은 프로세스를 찾고 데이터를 가장 많이 생성합니다 (따라서 누출되거나 데이터 사용에서 매우 비효율적 임). 이러한 애플리케이션을 선택하고 두 번째 목록보기에서 해당 맵핑을 분석하십시오. 자세한 내용은 exmap 섹션을 참조하십시오. 또한 Xrestop 을 사용하여 특히 X 서버의 프로세스에 많은 메모리가 필요한 경우 X 자원의 사용량이 많은지 확인하십시오. 자세한 내용은 xrestop 섹션을 참조하십시오.

당신이 누출 사용 검색하도록하려면 Valgrind의를 또는 가능 kmtrace .

당신은 (의 malloc 등) 힙 분석 응용 프로그램의 사용, 하나에서 실행하려면 memprof 또는 함께 kmtrace 응용 프로그램을 프로파일 링과 가장 큰 할당에 대한 함수 호출 트리를 검색 할 수 있습니다. 자세한 내용은 해당 섹션을 참조하십시오.


28

답변에 나와있는 해결 방법 외에도 Linux 명령 "top"을 사용할 수 있습니다. 실행중인 시스템에 대한 동적 실시간보기를 제공하며, 전체 프로그램에 대한 CPU 및 메모리 사용량과 모든 프로그램에 대한 백분율을 제공합니다.

top

프로그램 pid로 필터링하려면 :

top -p <PID>

프로그램 이름으로 필터링하려면 :

top | grep <PROCESS NAME>

"top"은 다음과 같은 일부 필드도 제공합니다.

VIRT-Virtual Image (kb) : 작업에 사용 된 총 가상 메모리 양

RES-상주 크기 (kb) : 작업이 사용한 스왑되지 않은 실제 메모리. RES = 코드 + 데이터.

DATA-Data + Stack size (kb) : '데이터 상주 세트'크기 또는 DRS라고도하는 실행 코드 이외의 다른 물리적 메모리 양입니다.

SHR-공유 메모리 크기 (kb) : 작업에서 사용하는 공유 메모리의 양입니다. 다른 프로세스와 공유 할 수있는 메모리 만 반영합니다.

여기를 참조 하십시오 .


20

프로세스가 사용하는 메모리 양을 정확하게 파악할 수 없기 때문에 이에 대한 단일 답변이 없습니다. 리눅스에서 대부분의 프로세스는 공유 라이브러리를 사용합니다. 예를 들어, 'ls'프로세스의 메모리 사용량을 계산하려고한다고 가정하십시오. 실행 파일 'ls'에서 사용한 메모리 만 계산합니까 (분리 할 수있는 경우)? libc는 어떻습니까? 아니면 'ls'를 실행하는 데 필요한 다른 모든 라이브러리입니까?

linux-gate.so.1 =>  (0x00ccb000)
librt.so.1 => /lib/librt.so.1 (0x06bc7000)
libacl.so.1 => /lib/libacl.so.1 (0x00230000)
libselinux.so.1 => /lib/libselinux.so.1 (0x00162000)
libc.so.6 => /lib/libc.so.6 (0x00b40000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00cb4000)
/lib/ld-linux.so.2 (0x00b1d000)
libattr.so.1 => /lib/libattr.so.1 (0x00229000)
libdl.so.2 => /lib/libdl.so.2 (0x00cae000)
libsepol.so.1 => /lib/libsepol.so.1 (0x0011a000)

다른 프로세스와 공유한다고 주장 할 수 있지만로드되지 않으면 시스템에서 'ls'을 (를) 실행할 수 없습니다.

또한 용량 계획을 수행하기 위해 프로세스에 필요한 메모리 양을 알아야하는 경우 프로세스의 각 추가 사본이 사용하는 양을 계산해야합니다. / proc / PID / status는 한 번에 충분한 메모리 사용량 정보를 제공 할 수 있다고 생각합니다. 다른 한편으로, valgrind는 프로그램 수명 동안 메모리 사용량에 대한 더 나은 프로파일을 제공합니다.


나는 그렇게으로 표시 메모리 사용되며, 프로세스가 VM에 걸리는 얼마나 많은 메모리를 발견하고는 Kubernetes에서 설정 메모리 제한에, 나는이 답변에 동의 사용할 노력하고 있어요pmap
디팍 Deore

16

코드가 C 또는 C ++ 인 경우 getrusage()프로세스의 메모리 및 시간 사용에 대한 다양한 통계를 반환 하는 사용할 수 있습니다 .

모든 플랫폼이이를 지원하는 것은 아니며 메모리 사용 옵션에 대해 0 값을 반환합니다.

대신에 생성 된 가상 파일을 볼 수 있습니다 /proc/[pid]/statm(여기서 [pid]프로세스 ID로 대체됩니다.에서 얻을 수 있음 getpid()).

이 파일은 7 개의 정수를 가진 텍스트 파일처럼 보입니다. 이 파일의 첫 번째 (모든 메모리 사용) 및 여섯 번째 (데이터 메모리 사용) 번호에 가장 관심이있을 것입니다.


모든 플랫폼에서 지원되는 것은 아닙니다.
CashCow

Linux 매뉴얼 페이지 ( linux.die.net/man/2/getrusage )에 따르면 getrusage는 SVr4, 4.3BSD 및 POSIX.1-2001 사양의 일부입니다 (POSIX는 utime 및 stime 필드 만 지정 함). 유닉스 이외의 플랫폼에서는 작동하지 않을 것으로 예상됩니다 (다른 플랫폼에 UNIX 기능을 제공하는 Cygwin과 같은 환경을 제외하고).
David C.

@DavidC. OP는 리눅스에 대해 물었다.
Alexis Wilke

@CashCow는 Linux에서 C / C ++ getpid()getprocessid()함수를 모르기 때문에 의미가 있습니까 ?
Alexis Wilke

12

Valgrind 는 자세한 정보를 표시 할 수 있지만 대상 응용 프로그램의 속도가 크게 느려지고 대부분의 경우 응용 프로그램의 동작이 변경됩니다.
Exmap 은 내가 아직 몰랐지만 정보를 얻으려면 커널 모듈 이 필요한 것 같습니다 . 장애물이 될 수 있습니다.

나는 모든 사람들이 WRT "메모리 사용"을 알고 싶어한다고 가정한다
. 리눅스에서, 단일 프로세스가 사용할 수있는 물리적 메모리의 양은 대략 다음과 같은 범주로 나눌 수있다.

  • Ma 익명 매핑 된 메모리

    • .p 개인
      • .d dirty == malloc / mmapped 힙 및 스택 할당 및 쓰기 메모리
      • .c clean == malloc / mmapped 힙 및 스택 메모리가 일단 할당되고, 기록 된 다음 해제되었지만 아직 회수되지 않은 경우
    • .s 공유
      • .d dirty == malloc / mmaped 힙이 쓰기-쓰기시 복사를 받고 프로세스간에 공유 될 수 있음 (편집 됨)
      • .c clean == malloc / mmaped 힙이 쓰기-쓰기시 복사를 받고 프로세스간에 공유 될 수 있음 (편집 됨)
  • Mn 명명 된 메모리

    • .p 개인
      • .d dirty == 파일 mmapped 기록 된 메모리 개인
      • .c clean == 매핑 된 프로그램 / 라이브러리 텍스트 개인용 매핑
    • .s 공유
      • .d dirty == 파일 mmapped 쓰기 메모리 공유
      • .c clean == 매핑 된 라이브러리 텍스트 공유 매핑

showmap 이라는 안드로이드에 포함 된 유틸리티 는 매우 유용합니다

virtual                    shared   shared   private  private
size     RSS      PSS      clean    dirty    clean    dirty    object
-------- -------- -------- -------- -------- -------- -------- ------------------------------
       4        0        0        0        0        0        0 0:00 0                  [vsyscall]
       4        4        0        4        0        0        0                         [vdso]
      88       28       28        0        0        4       24                         [stack]
      12       12       12        0        0        0       12 7909                    /lib/ld-2.11.1.so
      12        4        4        0        0        0        4 89529                   /usr/lib/locale/en_US.utf8/LC_IDENTIFICATION
      28        0        0        0        0        0        0 86661                   /usr/lib/gconv/gconv-modules.cache
       4        0        0        0        0        0        0 87660                   /usr/lib/locale/en_US.utf8/LC_MEASUREMENT
       4        0        0        0        0        0        0 89528                   /usr/lib/locale/en_US.utf8/LC_TELEPHONE
       4        0        0        0        0        0        0 89527                   /usr/lib/locale/en_US.utf8/LC_ADDRESS
       4        0        0        0        0        0        0 87717                   /usr/lib/locale/en_US.utf8/LC_NAME
       4        0        0        0        0        0        0 87873                   /usr/lib/locale/en_US.utf8/LC_PAPER
       4        0        0        0        0        0        0 13879                   /usr/lib/locale/en_US.utf8/LC_MESSAGES/SYS_LC_MESSAGES
       4        0        0        0        0        0        0 89526                   /usr/lib/locale/en_US.utf8/LC_MONETARY
       4        0        0        0        0        0        0 89525                   /usr/lib/locale/en_US.utf8/LC_TIME
       4        0        0        0        0        0        0 11378                   /usr/lib/locale/en_US.utf8/LC_NUMERIC
    1156        8        8        0        0        4        4 11372                   /usr/lib/locale/en_US.utf8/LC_COLLATE
     252        0        0        0        0        0        0 11321                   /usr/lib/locale/en_US.utf8/LC_CTYPE
     128       52        1       52        0        0        0 7909                    /lib/ld-2.11.1.so
    2316       32       11       24        0        0        8 7986                    /lib/libncurses.so.5.7
    2064        8        4        4        0        0        4 7947                    /lib/libdl-2.11.1.so
    3596      472       46      440        0        4       28 7933                    /lib/libc-2.11.1.so
    2084        4        0        4        0        0        0 7995                    /lib/libnss_compat-2.11.1.so
    2152        4        0        4        0        0        0 7993                    /lib/libnsl-2.11.1.so
    2092        0        0        0        0        0        0 8009                    /lib/libnss_nis-2.11.1.so
    2100        0        0        0        0        0        0 7999                    /lib/libnss_files-2.11.1.so
    3752     2736     2736        0        0      864     1872                         [heap]
      24       24       24        0        0        0       24 [anon]
     916      616      131      584        0        0       32                         /bin/bash
-------- -------- -------- -------- -------- -------- -------- ------------------------------
   22816     4004     3005     1116        0      876     2012 TOTAL

10

시도 할 세 가지 방법이 더 있습니다.

  1. ps aux --sort pmem
    출력을로 정렬합니다 %MEM.
  2. ps aux | awk '{print $2, $4, $11}' | sort -k2r | head -n 15
    파이프를 사용하여 정렬합니다.
  3. top -a
    기준으로 정렬을 시작합니다 %MEM

( 여기서 추출 )


2
top다른 프로세스는 프로세스에서 실제로 사용하는 메모리를 정확하게 표현하지 못할 수도 있습니다. 예를 들어, 64GiB의 RAM이 있고 postgres각각 16GiB RES 및 25 % MEM을보고하는 10 개의 프로세스 가 있습니다 . 물론, 모두 25 %를 사용할 수는 없습니다. 각각 15GiB SHR을 가지고 있으며, 공유하고있는 것 같습니다.
sudo

8
#!/bin/ksh
#
# Returns total memory used by process $1 in kb.
#
# See /proc/NNNN/smaps if you want to do something
# more interesting.
#

IFS=$'\n'

for line in $(</proc/$1/smaps)
do
   [[ $line =~ ^Size:\s+(\S+) ]] && ((kb += ${.sh.match[1]}))
done

print $kb

5
ksh는 표준 쉘입니다. 데스크탑 사용자 또는 최소한의 목적으로 Linux 배포판 에 기본적으로 설치되지는 않지만 거의 모든 유닉스 / 리눅스 OS에서 단 하나의 명령입니다. (즉, 모든 BSD, 모든 실제 UNIX, RHEL, SLES, 데비안, 우분투, OSX)
Florian Heigl

이 파일은 기본적으로 루트 사용자 만 액세스 할 수 있습니다.
Dmitry Ginzburg

다음은 sed | awkBusybox v1.23.2에서 다시 작성되어 작동하는 것입니다. sed -n 's/^Size:\s\+\(\S\+\) .*/\1/p' /proc/$1/smaps | awk '{s+=$1} END {print s}'
Ján Sáreník

1
@Catskul-POSIX 표준은 표준 쉘을 Bourne 쉘의 향상된 버전 인 Korn 쉘의 엄격한 서브 세트로 지정합니다.
ceph3us 2016 년

8

나는 사용하고있다 htop; Windows 작업 관리자와 비슷한 매우 좋은 콘솔 프로그램입니다.


내가 사용 htop하고 top보다 낫지 만 여전히 다른 응용 프로그램의 모든 스레드를 그룹화하지 않고 표시하여 거의 쓸모가 없습니다.
sorin

1
$ htop -p $ (pgrep <프로세스 이름> | xargs | tr '' ',')
AAAfarmclub

6

프로세스가 너무 많은 메모리를 사용하지 않는 경우 (이 경우가되거나 다른 명령이이 초기 표시를 제공했기 때문에) 프로세스가 짧은 시간 동안 중지 된 상태를 견딜 수있는 경우 gcore 명령을 사용하십시오.

gcore <pid>

생성 된 코어 파일의 크기를 확인하여 특정 프로세스가 얼마나 많은 메모리를 사용하고 있는지 알 수 있습니다.

I / O 성능에 따라 코어 생성에 몇 초 또는 몇 분이 소요될 수 있으므로 프로세스에서 수백 메가 또는 기가를 사용하는 경우에는 제대로 작동하지 않습니다. 코어 생성 중에 프로세스가 중지 (또는 "고정")되어 메모리 변경을 방지합니다. 그러므로 조심 해주시길 바랍니다.

또한 코어가 생성되는 마운트 지점에 충분한 디스크 공간이 있고 시스템이 해당 특정 디렉토리에서 생성되는 코어 파일에 부정적으로 반응하지 않는지 확인하십시오.


6

아치 리눅스를 사용하고 있는데이 멋진 패키지가 있습니다. ps_mem

ps_mem -p <pid>

출력 예

$ ps_mem -S -p $(pgrep firefox)

Private   +   Shared  =  RAM used   Swap used   Program

355.0 MiB +  38.7 MiB = 393.7 MiB    35.9 MiB   firefox
---------------------------------------------
                        393.7 MiB    35.9 MiB
=============================================

5

아래 명령 줄은 Linux 시스템에서 실행되는 다양한 프로세스가 사용하는 총 메모리를 MB 단위로 제공합니다

ps -eo size,pid,user,command --sort -size | awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' | awk '{total=total + $1} END {print total}'

5

보다 "실제"사용에 대한 좋은 테스트는 응용 프로그램을 연 다음 vmstat -s"활성 메모리"통계 를 실행 하고 확인하는 것입니다. 응용 프로그램을 닫고 몇 초 기다렸다가 vmstat -s다시 실행 하십시오. 그러나 많은 활성 메모리가 해제되었으므로 앱에서 사용중인 것 같습니다.


3
이것은 ps보다 어떻게 좋을까요 ?? 그것은 ps의 모든 한계와 함께 제공되며 훨씬 더 정확하지 않습니다 ...
Lester Cheung

일반적인 유닉스 시스템은 항상 많은 프로세스를 시작하고 마무리합니다. 여유 RAM을 예측할 수 없습니다.
Raúl Salinas-Monteagudo

4

valgrind를 얻으십시오. 프로그램에 실행할 프로그램을 제공하면 메모리 사용량에 대해 많이 알려줍니다.

이것은 일정 시간 동안 실행되고 중지되는 프로그램의 경우에만 적용됩니다. valgrind가 이미 실행중인 프로세스에 손을 넣을 수 있는지 또는 데몬과 같은 프로세스를 중지해서는 안되는지 모르겠습니다.


실행중인 프로세스에 valgrind를 "연결"할 수 없습니다. 의도적으로 설계된 것입니다.
Dima Tisnek

3

편집 : 메모리 소비가 증가 할 때만 100 % 잘 작동합니다 .

주어진 프로세스 (또는 처리 된 공유 공통 이름 그룹)로 메모리 사용량을 모니터링 google-chrome하려면 bash-script를 사용할 수 있습니다.

while true; do ps aux | awk ‚{print $5, $11}’ | grep chrome | sort -n > /tmp/a.txt; sleep 1; diff /tmp/{b,a}.txt; mv /tmp/{a,b}.txt; done;

계속해서 변경 사항을 찾아서 인쇄합니다.

여기에 이미지 설명을 입력하십시오


3

Valgrind로 프로파일 링하는 것보다 더 빠른 것을 원하고 커널이 더 오래되고 smap을 사용할 수없는 경우, 프로세스의 상주 세트를 표시하는 옵션이있는 ps ( ps -o rss,command)를 사용하면 _aproximation_실제의 스왑되지 않은 메모리가 사용 중입니다.


3

나는 당신이 꼭대기에 사용하는 것이 좋습니다. 이 페이지 에서 모든 정보를 찾을 수 있습니다 . 프로세스에 필요한 모든 KPI를 제공 할 수 있으며 파일로 캡처 할 수도 있습니다.


2
PSIZE [ "이 프로세스 (또는 사용자)의 비례 메모리 크기] atop -R를 표시하려면을 사용하여 시작하십시오 . 사용자 별 요약 푸시를 표시하려면 p메모리 사용을 기준으로 정렬하십시오.
Markus Strauss


1

에 대한 또 다른 투표 여기서는 Alleyoop 과 같은 도구를 사용하여 valgrind 에 의해 생성 된 결과를 해석하는 데 도움을 줄 수 있다고 덧붙이고 싶습니다 .

나는 항상 두 도구를 사용하고 항상 자랑스럽고 깔끔한 코드를 제공합니다.)


1

이 질문은 현재 실행중인 프로세스를 검사하는 것 같지만 응용 프로그램이 사용하는 최대 메모리를 처음부터 끝까지보고 싶었습니다. valgrind 외에도 tstime 을 사용할 수 있습니다 . "고용량"메모리 사용량 (RSS 및 가상)을 측정합니다. 에서 이 답변 .


malloc () 및 malloc 유사 메모리 라이브러리를 사용하는 대부분의 응용 프로그램은 종료가 끝날 때까지 페이지를 OS로 반환하지 않습니다. 따라서 PS (또는 프로세스 힙에 파고 들지 않는 다른 도구)로 볼 수있는 양이 최고 수준입니다.
David C.

0

관련 질문 에 대한 답변을 바탕으로 합니다.

SNMP를 사용하여 네트워크의 특정 장치에서 프로세스의 메모리 및 CPU 사용량을 얻을 수 있습니다. :)

요구 사항 :

  • 프로세스를 실행하는 장치에는 snmp가 설치되어 실행 중이어야합니다.
  • snmp는 아래 스크립트를 실행할 요청을 수락하도록 구성해야합니다 (snmpd.conf에서 구성 될 수 있음)
  • 모니터링하려는 프로세스의 프로세스 ID (pid)를 알아야합니다.

노트:

  • HOST-RESOURCES-MIB :: hrSWRunPerfCPU 는이 프로세스에서 사용하는 전체 시스템 CPU 리소스의 센트 초 수입니다. 다중 프로세서 시스템에서이 값은 1 센티 초의 실제 (벽 시계) 시간에서 1 센티 초 이상 증가 할 수 있습니다.

  • HOST-RESOURCES-MIB :: hrSWRunPerfMem 은이 프로세스에 할당 된 실제 시스템 메모리의 총량입니다.

**

프로세스 모니터링 스크립트 :

**

echo "IP: "
read ip
echo "specfiy pid: "
read pid
echo "interval in seconds:"
read interval

while [ 1 ]
do
    date
    snmpget -v2c -c public $ip HOST-RESOURCES-MIB::hrSWRunPerfCPU.$pid
    snmpget -v2c -c public $ip HOST-RESOURCES-MIB::hrSWRunPerfMem.$pid
    sleep $interval;
done

0

/ prox / xxx / numa_maps는 몇 가지 정보를 제공합니다 : N0 = ??? N1 = ???. 그러나이 결과는 실제 결과보다 낮을 수 있습니다. 이는 터치 된 결과 만 계산하기 때문입니다.


-1

우분투에서 사용 가능한 내장 ' 시스템 모니터 'GUI 도구를 사용하십시오.


1
적어도 16.04부터는 잘 작동합니다. 최고 메모리와 비슷하지만 사용 된 메모리는 매우 정확하지 않습니다 ...
Alexis Wilke
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.