উদ্বেগজনক উদ্দেশ্যে মেমরির ব্যবহার কীভাবে পর্যবেক্ষণ করবেন


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 এর মাধ্যমে নিরীক্ষণ করুন

আমি এই পাইথন স্ক্রিপ্ট এবং / প্রোক / পিড / স্ট্যাটিকে কোনও প্রক্রিয়ার স্মৃতি নিরীক্ষণ করতে ব্যবহার করেছি:

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

আপনি সম্ভবত সি এর মতো কিছু অনুবাদ করতে চান।

প্রতিটি প্রক্রিয়া জন্য সীমাবদ্ধ সম্পদ

অথবা ব্যবহার ulimit/setrlimit

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


আপনার পাইথন স্ক্রিপ্টটি মেমরির ব্যবহার গণনা করতে যে পদ্ধতিটি ব্যবহার করে তা আপনি ব্যাখ্যা করতে পারেন? এটি এটিকে আরও ভাল উত্তর দেবে।
ঝাঁকুনি

ঠিক আছে, এটি সেকেন্ডের পদক্ষেপে কেবল ভিএম-ব্যবহার লগ করে। আমি প্রোগ্রামের আজীবন মেমরি গ্রাফিক্সের জন্য এটি ব্যবহার করেছি। এটি দীর্ঘ চলমান প্রোগ্রামগুলিতে মেম লিকগুলি ডিবাগ করার পক্ষে কার্যকর ছিল।
snies

আপনি কিছু প্রাথমিক সময় পরে একটি অগ্রগতি পর্যবেক্ষণ করতে এটি ব্যবহার করতে পারেন। এবং যদি ভিউম্যাসেজ নির্দিষ্ট প্রান্তরেখা অতিক্রম করে তবে কিছু "ফাঁস সন্দেহজনক পতাকা" সতর্ক করুন।
snies

1
Phacker.org এর লিঙ্কটি আর নেই
f01

... এজন্যই স্টার এক্সচেঞ্জ সর্বদা লিঙ্কগুলি নয়, স্ক্রিপ্টগুলির বিষয়বস্তু পোস্ট করতে বলে
জেডিএস

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

এটিকে সতর্কতা হিসাবে নাম দিন এবং কমান্ডটি কার্যকর করুন: chmod +x alert.sh

প্রতি 10 মিনিটে এই স্ক্রিপ্টটি চালানোর জন্য ক্রোন কনফিগার করুন

এমবিতে আপনার সার্ভারের মোট মেমরির সাথে '512' এবং প্রকৃত ইমেল ঠিকানার সাথে 'অ্যাডমিন@domain.com' প্রতিস্থাপন নিশ্চিত করুন sure এটি যখনই মেমরির ব্যবহার 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

সিস্টেস্ট প্যাকেজটির আর একটি দরকারী ইউটিলিটি হ'ল সর।

মেমরির তথ্যের জন্য, ব্যবহার করুন:

$ 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

আমি অবশ্যই এই বাক্সে আরও র‍্যাম ব্যবহার করতে পারি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.