놀라운 목적으로 메모리 사용을 모니터링하는 방법


9

우리는 스왑없이 리눅스 시스템을 내장했습니다.

현재 메모리 사용량 %가 임계 값 이상으로 증가하면 경보를 발생시켜야합니다. 메모리 사용량 %가 (높은) 임계 값 이상으로 증가하면 재부팅하십시오.

그 이유 : 일부 프로그램이 누출 된 경우 커널이 프로세스를 종료하기 전에 안전 재부팅을 수행 할 수 있습니다 (데이터 손상 또는 사용 불가능으로 이어질 수 있음).

그러나 우리는 문제가 있습니다 :

우리의 목적에 사용될 수있는 메모리 사용량을 계산하는 방법?

/ proc / meminfo의 값을 사용하여 메모리 사용량을 계산하려고 시도했습니다.

/ # cat /proc/meminfo
MemTotal:       126744 kB
MemFree:         58256 kB
Buffers:         16740 kB
Cached:          31308 kB
SwapCached:          0 kB
Active:          37580 kB
Inactive:        24000 kB

성공없이:

(MemTotal - MemFree) 예를 들어 캐시를 포함하기 때문에 사용할 수 없습니다.

(MemTotal - MemFree - Buffers - Cached)의 효과를 무시했다 Inactive. 따라서 너무 큰 메모리 사용량 값을 제공합니다.

(MemTotal - MemFree - Buffers - Cached - Inactive) 결과는 부정적 일 수 있으므로 사용할 수 없습니다.

답변:


6

통해 시스템 모니터링 free

[root@localhost ~]# free
          total       used       free     shared    buffers     cached
Mem:    2058240    1776788     281452          0      89780    1335840
-/+ buffers/cache:  351168    1707072
Swap:   4095992        100    4095892

상기 봐 -/+ buffers/cache라인 usedfree

/ proc을 통해 각 프로세스를 모니터링

이 파이썬 스크립트와 / proc / pid / stat를 사용하여 프로세스의 메모리를 모니터링했습니다.

http://phacker.org/2009/02/20/monitoring-virtual-memory-usage-with-python/

아마도 이런 것을 c로 번역하고 싶을 것입니다.

각 프로세스에 대한 리소스 제한

또는 ulimit/를 사용하십시오setrlimit

/programming/4983120/limit-memory-usage-for-a-single-linux-process


파이썬 스크립트가 메모리 사용량을 계산하는 데 사용하는 방법을 설명 할 수 있습니까? 그렇게하면 훨씬 더 나은 대답이 될 것입니다.
Flimzy

글쎄, 그것은 단지 vm-usage를 몇 초만에 기록합니다. 프로그램 수명 동안 mem 소비를 그래프로 표시하는 데 사용했습니다. 이것은 오래 실행되는 프로그램에서 mem leak을 디버그하는 데 편리했습니다.
snies

몇 초 후에 프로그램을 모니터링하기 위해 이것을 사용할 수 있습니다. 그리고 vmusage가 특정 임계 값을 넘으면 "누설 용의자 플래그"에 경고합니다.
snies

1
phacker.org에 대한 링크는 더 이상 없습니다
f01

... 그래서 StarckExchange는 링크뿐만 아니라 항상 스크립트 내용을 게시하도록 요청합니다.
JDS

4
#!/bin/bash

threshold=90
threshold2=95

freemem=$(($(free -m |awk 'NR==2 {print $3}') * 100))

usage=$(($freemem / 512))

if [ "$usage" -gt "$threshold" ]

then

/etc/init.d/service_name restart

     if [ "$usage" -gt "$threshold2" ]

     then

     echo "The memory usage has reached $usage% on $HOSTNAME." | mail -s "High Memory Usage Alert" admin@domain.com


     fi
fi

이것을 alert.sh로 이름을 지정하고 다음 명령을 실행하십시오. chmod +x alert.sh

10 분마다이 스크립트를 실행하도록 크론 구성

'512'를 서버의 총 메모리 (MB)로 바꾸고 'admin@domain.com'을 실제 이메일 주소로 바꾸십시오. 메모리 사용량이 95 %를 초과 할 때마다 이메일 경고를 보내고 "service_name"서비스가 90 %에 도달하면 다시 시작합니다.


2

cron에서 쉘 스크립트를 free 명령과 함께 사용하여 메모리를 모니터하고 해당 값에 따라 작동 할 수 있습니다. 예를 들어 RAM 메모리를 모니터링하려면

#!/bin/bash

LOG_DIR=/var/log/memory_monitor.log

DATE=$(date +%d/%m/%Y)
TIME=$(date +%H:%M)
TIMESTAMP="$DATE $TIME"

MONITOR=$(free | grep Mem)
MEM_USED=$(echo $MONITOR | awk '{ print $3 }')
MEM_FREE=$(echo $MONITOR | awk '{ print $4 }')

echo "$TIMESTAMP $MEM_USED $MEM_FREE" >> $LOG_DIR

출력을 반향하는 대신 값을 원하는 한계로 평가하고 메일, 재부팅 또는 원하는 조치를 수행 할 수 있습니다.

if [ eval_values > threshold ]
then
    # Do stuff (mail, reboot, etc)
fi

그런 다음 원하는 간격으로 실행되도록 crontab에 추가합니다.


1

sysstat 패키지의 또 다른 유용한 유틸리티는 sar입니다.

메모리 정보는 다음을 사용하십시오.

$ sar -r 1
Linux 3.0.0-12-generic (HFC-2600)       05/03/2012      _i686_  (4 CPU)

01:35:45 PM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact
01:35:46 PM    118484    907364     88.45     59200    317368   2169716    104.75    412476    436140

이 상자에서 더 많은 RAM을 사용할 수 있습니다.

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