메모리 사용량을 어떻게 모니터링 할 수 있습니까?


265

나는 현재 top메모리 사용량을 보았습니다. 그러나 일정 기간 동안 메모리 사용량을 모니터링하고 싶습니다. 예를 들어 모니터링을 시작한 다음 몇 가지 명령을 실행하고 마지막으로 모니터링을 중지하고 해당 기간 동안 사용 된 메모리 양을 확인하십시오.

우분투 서버에서 어떻게 할 수 있습니까?

5 초마다 cronjob을 시작하고 텍스트 파일에 현재 메모리 사용량을 기록하는 명령을 호출 할 수 있습니다. 그러나 텍스트 파일에 쉽게 기록 할 수있는 형식으로 현재 메모리 사용량을 얻으려면 어떤 명령을 사용해야합니까?

답변:


322

이전 답변을 결합하는 것이 좋습니다

watch -n 5 free -m

리눅스는 여분의 메모리를 사용하여 하드 드라이브 블록캐시 하는 것을 좋아한다 . 그래서 당신은 단지 무료를보고 싶지 않습니다 Mem. 행 의 free열 을 보려고 -/+ buffers/cache:합니다. 응용 프로그램에서 사용할 수있는 메모리 양을 보여줍니다. 그래서 나는 방금 달려서 free -m이것을 얻었습니다.

             total       used       free     shared    buffers     cached
Mem:          3699       2896        802          0        247       1120
-/+ buffers/cache:       1528       2170
Swap:         1905         62       1843

1528MB를 사용 하고 있으며 2170MB의 여유 공간 이 있다는 것을 알고 있습니다.

참고 : 이주기를 중단하려면 +를 watch누르십시오 .CtrlC


1
감사합니다. 유익한 정보입니다. 그러나 사용 된 열에서 먼저 버퍼를 가지고 2896있고 1528이것이 버퍼를 사용한다는 의미는 아닙니다 2896 + 1528.
Jonas

8
Mem: used사용 된 총 메모리입니다. -/+ buffers/cache: used사용 된 총 메모리 에서 버퍼와 캐시를 뺀 값 입니다. 출력이 재미있어 보이지만 여기에는 산술이 필요하지 않습니다. -/ + buffers / cache 행에서 used / free를 찾고 있습니다.
저스틴 포스

6
-h 옵션은 훨씬
좋습니다

1
@frmdstryr 좋은 지적입니다! -h /-내가 이것을 쓸 때 인간은 존재하지 않았다. gitlab.com/procps-ng/procps/commit/…
Justin Force

3
@ cbradsh1 free -hwatch -n 5 free -h를 들어 , 출력 2.1G대신 "사람이 읽을 수있는"출력을 얻으려면을 수행 하면 됩니다 2170.
저스틴 포스

213

htop최선의 해결책 이라고 생각 합니다.

  • sudo apt-get install htop

이 방법으로 어떤 프로그램이 대부분의 RAM을 사용하고 있는지 알 수 있습니다. 원하는 경우 쉽게 종료 할 수 있습니다. 스크린 샷이 있습니다!


2
htop"그래픽"이고 읽기보다는 쉬워서 좋습니다 free.
mjswensen

1
출력을 이해하지 못합니다. 가 RESMB에 해당 응용 프로그램에 의해 사용되는 메모리는? 무엇 SHR입니까?
faizal

1
@faizal : 가상, 예약 및 공유 메모리.
WitchCraft

1
htop'일정 기간 동안의 메모리 사용량'을 어떻게 표시합니까?
dangel

htop -s M_SHARE htop -s 시간
Tomachi

40

실행중인 각 프로세스에서 사용되는 메모리의 좋은 분류를 찾고 있다면 ps_mem.py ( 여기 에서 pixelbeat.org에 있음)를 확인하는 것이 좋습니다 .

위의 의견에서 무료 로 한 줄짜리 스냅 샷을 원한다고 언급 했지만 다른 사람들이 이것이 유용하다고 생각했습니다.

출력 예 :

user@system:~$ sudo ps_mem.py
[sudo] password for user:
 Private  +   Shared  =  RAM used       Program

  4.0 KiB +   7.5 KiB =  11.5 KiB       logger
  4.0 KiB +   8.0 KiB =  12.0 KiB       mysqld_safe
  4.0 KiB +  10.0 KiB =  14.0 KiB       getty
  4.0 KiB +  42.0 KiB =  46.0 KiB       saslauthd (5)
 48.0 KiB +  13.0 KiB =  61.0 KiB       init
 56.0 KiB +  27.5 KiB =  83.5 KiB       memcached
 84.0 KiB +  26.5 KiB = 110.5 KiB       cron
120.0 KiB +  50.0 KiB = 170.0 KiB       master
204.0 KiB + 107.5 KiB = 311.5 KiB       qmgr
396.0 KiB +  94.0 KiB = 490.0 KiB       tlsmgr
460.0 KiB +  65.0 KiB = 525.0 KiB       rsyslogd
384.0 KiB + 171.0 KiB = 555.0 KiB       sudo
476.0 KiB +  83.0 KiB = 559.0 KiB       monit
568.0 KiB +  60.0 KiB = 628.0 KiB       freshclam
552.0 KiB + 259.5 KiB = 811.5 KiB       pickup
  1.1 MiB +  80.0 KiB =   1.2 MiB       bash
  1.4 MiB + 308.5 KiB =   1.7 MiB       fail2ban-server
888.0 KiB +   1.0 MiB =   1.9 MiB       sshd (3)
  1.9 MiB +  32.5 KiB =   1.9 MiB       munin-node
 13.1 MiB +  86.0 KiB =  13.2 MiB       mysqld
147.4 MiB +  36.5 MiB = 183.9 MiB       apache2 (7)
---------------------------------
                        208.1 MiB
=================================

 Private  +   Shared  =  RAM used       Program

내가 싫어하는 유일한 부분은 스크립트가 루트 권한을 요구한다고 주장한다는 것입니다. 나는 이것이 왜 그런지 정확히 볼 기회가 없었습니다.


스레드간에 메모리가 공유되는지 궁금합니다. 프로세스간에 공유되지 않습니까? 적어도 Windows에서 ...
Thomas Weller

따라서이 경우 공유 메모리는 여러 프로세스에 의해 공유 라이브러리 형태로 매핑 된 페이지를 나타냅니다. 또한 다중 스레드 응용 프로그램의 컨텍스트 내에서 해당 프로세스의 모든 스레드가 전체 프로세스 메모리 공간에 액세스 할 수 있습니다.
Jason Mock

4
이제 PyPI ( pip install ps_mem) 및 GitHub 에서 사용할 수 있습니다 .
Leif Arne Storset

@ThomasWeller : 예, 스레드는 항상 메모리를 공유하지만 프로세스는 특정 조건에서 일부 또는 전부를 공유 할 수 있습니다.
Leif Arne Storset

이를 위해 나는 그놈 시스템 모니터를 사용

24

free 명령을 사용하십시오 . 예를 들어, 이것은 다음의 출력입니다 free -m.

             total       used       free     shared    buffers     cached
Mem:          2012       1666        345          0        101        616
-/+ buffers/cache:        947       1064
Swap:         7624          0       7624

free -m | grep /+ 두 번째 줄만 반환합니다.

-/+ buffers/cache:        947       1064

고마워요 이것이 947메모리 사용량에서 버퍼와 캐시에 사용 된 메모리를 뺀 것입니까?
Jonas

11

시계 명령이 유용 할 수 있습니다. watch -n 5 free5 초마다 업데이트로 메모리 사용량을 모니터 하십시오 .


감사합니다. 그러나 한 줄에 메모리 사용을 원하므로 텍스트 파일에 쉽게 로그 할 수 있습니다.
Jonas

8

을 사용하여 수행 할 수 있습니다 cat /proc/meminfo.

MemTotal:        4039160 kB
MemFree:          309796 kB
MemAvailable:    3001052 kB
Buffers:          345636 kB
Cached:          2341288 kB
SwapCached:            8 kB
Active:          1725160 kB
Inactive:        1551652 kB
Active(anon):     538404 kB
Inactive(anon):    70076 kB
Active(file):    1186756 kB
Inactive(file):  1481576 kB
Unevictable:          32 kB
Mlocked:              32 kB
SwapTotal:       4194300 kB
SwapFree:        4194044 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        589988 kB
Mapped:           255972 kB
Shmem:             18596 kB
Slab:             374888 kB
SReclaimable:     310496 kB
SUnreclaim:        64392 kB
KernelStack:        6976 kB
PageTables:        26452 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     6213880 kB
Committed_AS:    3589736 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      147392 kB
DirectMap2M:     4046848 kB

1
이 명령 앞에 시계를 추가하면 멋집니다! watch cat /proc/meminfo
Geek

free명령은 정보를 가져 와서 /proc/meminfo간단한 방법으로 제공합니다. 사용하여 free -h사람이 읽을 수있는 출력.
LoMaPh

4

전체 RAM 사용량을 시각적으로 모니터링하기 위해 Byobu 를 사용하면 메모리 사용량이 터미널의 오른쪽 하단에 유지되고 터미널 세션 중에 실행됩니다.

스크린 샷에서 볼 수 있듯이 가상 머신의 가동 시간은 1 시간 3 분,로드가 0.00이며 시스템에서 사용할 수있는 2.8GHz (가상) 프로세서 및 994MB (21 %)의 RAM이 있습니다.

o 부 사용중


3

단일 회선 솔루션 및 출력 :

free -m | grep "Mem:"

예상되는 출력의 예는 다음과 같습니다.

Mem:           3944         652         302          18        2990        2930

1

나는 Cacti를 사용할 것이다 . 이것은 일정 기간 동안의 메모리 사용량 등을 그래프로 나타내며 웹 브라우저를 사용하여 사용량을 확인할 수 있습니다.


1

메모리 사용량 모니터링

메모리 사용을 모니터링하는 훌륭한 방법으로 Cacti를 언급 한 이전 게시물 중 하나와 더 일치합니다. 그러나 선인장이 더 이상 주류에서 인기가 없기 때문에 Graphite라는 대체 그래프 응용 프로그램이 있습니다.

Graphite는 우분투 서버에 설치하고 설치하기가 상대적으로 쉽습니다. 이 링크확인하여 설치 절차를 쉽게 수행 할 수 있습니다 .

흑연을 설치 한 후 원하는 간격으로 메모리 메트릭을 보낼 수 있습니다. 5 초마다, 1 분마다, 1 시간마다 ...

이전 게시물에서 이미 제안한대로 메모리 메트릭을 그래프로 표시하려면 시스템 도구를 사용하여 필요한 메모리 정보를 수집하는 고유 한 스크립트를 작성할 수 있습니다. 또는 모든 작업을 수행하는 미리 작성된 snmp 플러그인을 사용할 수 있습니다.

자체 메모리 스크립트를 작성하려면 사용한 메모리를 계산할 때 버퍼링 및 캐시 된 메모리를 고려하는 것이 좋습니다. 그렇지 않으면 잘못된 데이터가 수집됩니다.

필요한 모든 계산을 이미 수행하는 snmp 플러그인을 대신 사용하려면 checkMemoryviaSNMP와 잘 작동하는 링크가 있습니다.

SNMP의 장점 :

모니터링하는 모든 원격 노드에 snmp를 설치했습니다. 이를 통해 원격 노드에 플러그인을 복사하거나 넣지 않고도 하나의 중앙 서버 에서 모든 시스템을 모니터링 할 수 있습니다 .

SNMP의 단점 :

메모리를 모니터링하려는 각 원격 노드에 snmp 에이전트 가 설치되어 있는지 확인해야합니다 . 그러나이 설치는 일회성 계약입니다. 요리사 또는 꼭두각시와 같은 자동화 도구 또는 이와 유사한 도구를 환경에서 사용하는 경우 전혀 문제가되지 않습니다.

원격 노드에서 SNMP 에이전트 구성 :

snmp 에이전트가 설치된 후에는 /etc/snmpd/snmpd.conf 파일을 찾아서 다음 행을 추가하십시오.

rocommunity  (specify-a-community-string-aka-password-here)

그런 다음 다음과 같이 snmpd 에이전트를 다시 시작하십시오.

/etc/init.d/snmpd restart

그런 다음 중앙 서버에서 다른 모든 서버를 모니터링하는 대신 다음 명령을 실행할 수 있습니다.

$ time ./checkMemoryviaSNMP -v2 public gearman001.phs.blah.com 30 90 graphite,10.10.10.10,2003,typical
WARNING: Used = [ 3.26154 GB ], Installed = [ 5.71509 GB ], PCT.Used = [ 57.069% ], Available.Memory = [ 2.00291 GB ]. Buffer = [ 137.594 MB ], Cached = [ 1.3849 GB ]. Thresholds: [ W=(30%) / C=(90%) ].  System Information = [ Linux gearman001.phs.blah.com 2.6.32-504.30.3.el6.x86_64 #1 SMP Thu Jul 9 15:20:47 EDT 2015 x86_64 ].

real    0m0.23s
user    0m0.03s
sys     0m0.02s
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.