खतरनाक उद्देश्य के लिए स्मृति उपयोग की निगरानी कैसे करें


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लाइन usedऔर देखोfree

/ प्रक्रिया के माध्यम से प्रत्येक प्रक्रिया की निगरानी करें

मैंने इस प्रक्रिया की स्मृति की निगरानी के लिए इस पाइथन स्क्रिप्ट और / proc / pid / स्टेट का उपयोग किया:

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

आप शायद इस तरह से सी का अनुवाद करना चाहेंगे।

प्रत्येक प्रक्रिया के लिए संसाधन सीमित करें

या उपयोग ulimit/setrlimit

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


क्या आप मेमोरी के उपयोग की गणना करने के लिए अपनी पायथन स्क्रिप्ट का उपयोग करने की विधि बता सकते हैं? इससे यह एक बेहतर जवाब होगा।
Flimzy

खैर, यह सिर्फ एक सेकंड के चरणों में वीएम-उपयोग को लॉग करता है। मैंने इसका उपयोग कार्यक्रम जीवनकाल में मेम खपत को रेखांकन के लिए किया। यह लंबे चलने वाले प्रोग्रामों में मेम लीक को डिबग करने के लिए आसान था।
SNIES

तुम सिर्फ कुछ init समय के बाद एक ठेला की निगरानी के लिए इसका इस्तेमाल कर सकते हैं। और कुछ "लीक संदिग्ध झंडे" को सतर्क करें यदि 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

इसे चेतावनी के रूप में नाम दें। s और कमांड निष्पादित करें: chmod +x alert.sh

इस स्क्रिप्ट को हर 10 मिनट में चलाने के लिए एक क्रोन कॉन्फ़िगर करें

MB में '512' को अपने सर्वर की कुल मेमोरी और 'admin@domain.com' के साथ वास्तविक ईमेल पते से बदलना सुनिश्चित करें। जब भी मेमोरी का उपयोग 95% से अधिक हो जाता है तो यह एक ईमेल अलर्ट भेजेगा और 90% तक पहुंचने पर सेवा "सेवा_नाम" को फिर से शुरू करेगा।


2

आप मेमोरी को मॉनिटर करने और इसके मानों को एक्ट करने के लिए फ्री कमांड के साथ क्रोन में शेल स्क्रिप्ट का उपयोग कर सकते हैं। उदाहरण के लिए, रैम मेमोरी की निगरानी करने के लिए:

#!/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

फिर आप इसे अपने इच्छित अंतराल में चलाने के लिए क्रॉस्टैब में जोड़ते हैं।


1

sysstat पैकेज से एक और उपयोगी उपयोगिता सर है।

स्मृति जानकारी के लिए, उपयोग करें:

$ 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

मैं निश्चित रूप से इस बॉक्स पर अधिक रैम का उपयोग कर सकता हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.