एक सरल स्क्रिप्ट के साथ लिनक्स सर्वर लोड समस्याओं का निदान करें
यदि आप किसी भी लम्बाई के लिए एक व्यवस्थापक रहे हैं, तो आपने निश्चित रूप से ऐसी स्थितियों की खोज की है जहां एक सर्वर सीपीयू या मेमोरी उपयोग और / या लोड स्तरों में उपयोग करता है। 'टॉप' चलाना हमेशा आपको जवाब नहीं देगा। तो आप उन चुस्त प्रक्रियाओं को कैसे खोजते हैं जो आपके सिस्टम संसाधनों को चबा रहे हैं जो उन्हें मारने में सक्षम हैं?
निम्नलिखित स्क्रिप्ट मदद करने में सक्षम हो सकती है। यह एक वेब सर्वर के लिए लिखा गया था, इसलिए इसके कुछ हिस्से हैं जो विशेष रूप से httpd प्रक्रियाओं और कुछ भागों की तलाश में हैं जो MySQL के साथ काम करते हैं। आपके सर्वर परिनियोजन के आधार पर, उन अनुभागों को टिप्पणी / हटाएं और दूसरों को जोड़ें। इसका उपयोग प्रारंभिक बिंदु के लिए किया जाना चाहिए.
स्क्रिप्ट के इस संस्करण के लिए आवश्यक कुछ GNU जनरल पब्लिक लाइसेंस के तहत जारी किया गया कुछ फ्रीवेयर है जिसे mytop (http://jeremy.zawodny.com/mysql/mytop/ पर उपलब्ध है) जो यह बताने के लिए एक शानदार उपकरण है कि एसक्यूएल कैसा प्रदर्शन कर रहा है। यह पुराना हो रहा है, लेकिन अभी भी हमारे उद्देश्यों के लिए बहुत अच्छा काम करता है.
इसके अतिरिक्त, मैं मेलर के रूप में म्यूट का उपयोग करता हूं - आप केवल 'मेल' उपयोगिता में निर्मित लिनक्स का उपयोग करने के लिए स्क्रिप्ट को बदलना चाह सकते हैं। मैं इसे हर घंटे क्रोन के माध्यम से चलाता हूं; जैसा कि आप फिट देखते हैं समायोजित करें ओह - और इस स्क्रिप्ट को रूट के रूप में चलाने की आवश्यकता है क्योंकि यह सर्वर के कुछ संरक्षित क्षेत्रों से पढ़ता है.
तो चलिए शुरू करते हैं, हम?
सबसे पहले, अपनी स्क्रिप्ट चर सेट करें:
#! / Bin / bash
#
# स्क्रिप्ट सिस्टम लोड औसत स्तर की जाँच करने के लिए निर्धारित करने के लिए प्रयास करें
# क्या प्रक्रियाएँ इसे अत्यधिक ऊँचाई पर ले जा रही हैं ...
#
# 07Jul2010 tjones
#
# सेट का माहौल
dt = "तिथि +% d% b% Y-% X"
# जाहिर है, निम्नलिखित निर्देशिकाओं को बदलें जहां आपकी लॉग फाइलें वास्तव में रखी गई हैं
tmpfile = "/ tmp / checkSystemLoad.tmp"
लॉगफ़ाइल = "/ tmp / checkSystemLoad.log"
msgLog = "/ var / log / संदेश"
mysqlLog = "/ var / log / mysqld.log"
# पहला मेलस्टॉप रिपोर्टों के लिए मानक ईमेल है। दूसरा एक सेल फोन के लिए है (एक रिपोर्ट नीचे के साथ)
mailstop = "[email protected]"
mailstop1 = "[email protected]"
मशीन = "होस्ट नाम"
# निम्नलिखित तीन mytop के उपयोग के लिए हैं - एक db उपयोगकर्ता का उपयोग करें जिसमें अच्छे अधिकार हैं
dbusr = "उपयोगकर्ता नाम"
dbpw = "पासवर्ड"
db = "yourdatabasename"
# निम्नलिखित लोड स्तर पर जांच करने के लिए है - 10 वास्तव में उच्च है, इसलिए आप इसे कम करना चाह सकते हैं.
levelToCheck = 10
इसके बाद, स्क्रिप्ट को जारी रखना चाहिए या नहीं यह देखने के लिए अपने लोड स्तर की जाँच करें:
# सिस्टम से चर सेट करें:
LoadLevel = "cat / proc / loadavg | awk" प्रिंट $ 1 "
loadLevel = $ (प्रिंटफ़ "% 0.f" $ loadLevel)# यदि लोड स्तर आप चाहते हैं की तुलना में अधिक है, स्क्रिप्ट प्रक्रिया शुरू करें। अन्यथा, 0 से बाहर निकलें
अगर [$ loadLevel -gt $ levelToCheck]; फिर
इको ""> $ tmpfile
गूंज "*********************************"
गूंज "तिथि: $ dt" >> $ tmpfile
गूंज "सिस्टम लोड और प्रक्रियाएं जांचें" >> $ tmpfile
गूंज "*********************************"
और चेक के माध्यम से जारी रखें, परिणाम को अस्थायी फ़ाइल में लिखें। अपनी स्थिति के लिए यहां से आइटम जोड़ें या हटाएं:
# सिस्टम से अधिक चर प्राप्त करें:
httpdProcesses = "ps -def | grep httpd | grep -v grep | wc -l"# वर्तमान लोड स्तर दिखाएं:
इको "लोड लेवल इज़: $ लोडलीवेल" >> $ tmpfile
गूंज "********************************* * >> $ tmpfile# अब चलने वाली httpd प्रक्रियाओं की संख्या दिखाएं (बच्चों को शामिल नहीं):
गूंज "httpd प्रक्रियाओं की संख्या: $ httpdProcesses" >> $ tmpfile
गूंज "********************************* * >> $ tmpfile
गूंज "" >> $ tmpfile# प्रक्रिया सूची दिखाएं:
गूंज "अब चल रही प्रक्रियाएं:" >> $ tmpfile
ps f -ef >> $ tmpfile
गूंज "********************************* * >> $ tmpfile
गूंज "" >> $ tmpfile# वर्तमान MySQL जानकारी दिखाएं:
इको "mytop से परिणाम:" >> $ tmpfile
/ usr / bin / mytop -u $ dbusr -p $ dbpw -b -d $ db >> $ tmpfile
गूंज "********************************* * >> $ tmpfile
गूंज "" >> $ tmpfile
शीर्ष कमान के साथ सूचना, हम दो अस्थायी फ़ाइलों को लिख रहे हैं। एक सेल फोन के लिए बहुत छोटे संदेश के लिए है। यदि आप सुबह तीन बजे सेल फोन अलर्ट की तात्कालिकता नहीं चाहते हैं, तो आप इसे ले सकते हैं (और स्क्रिप्ट में बाद में दूसरी मेलिंग रूटीन निकाल सकते हैं).
# वर्तमान शीर्ष दिखाएँ:
इको "टॉप अब दिखाता है:" >> $ tmpfile
गूंज "शीर्ष अब दिखाता है:" >> $ topfile
/ usr / bin / top -b -n1 >> $ tmpfile
/ usr / bin / top -b -n1 >> $ topfile
गूंज "********************************* * >> $ tmpfile
गूंज "" >> $ tmpfile
अधिक जांच:
# वर्तमान कनेक्शन दिखाएं:
इको "नेटस्टैट अब दिखाता है:" >> $ tmpfile
/ बिन / netstat -p >> $ tmpfile
गूंज "********************************* * >> $ tmpfile
गूंज "" >> $ tmpfile# डिस्क स्थान की जाँच करें
गूंज "डिस्क स्थान:" >> $ tmpfile
/ बिन / df -k >> $ tmpfile
गूंज "********************************* * >> $ tmpfile
गूंज "" >> $ tmpfile
फिर अस्थायी फ़ाइल सामग्री को और अधिक स्थायी लॉग फ़ाइल में लिखें और परिणामों को उपयुक्त पार्टियों को ईमेल करें। दूसरी मेलिंग 'डाउन' से बाहर मानक के समान परिणाम वाले परिणाम नीचे है:
# लॉग फ़ाइल में परिणाम भेजें:
/ बिन / बिल्ली $ tmpfile >> $ logfile# और sysadmin को ईमेल परिणाम:
/ usr / bin / mutt -s "$ मशीन का उच्च लोड स्तर है! - $ dt -a $ mysqlLog -a $ msgLog $ mailstop <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ लॉगफ़ाइल
और फिर कुछ हाउसकीपिंग और बाहर निकलें:
# और फिर अस्थायी फ़ाइल को हटा दें:
rm $ tmpfile
rm $ टॉपफाइल
फाई#
बाहर निकलें 0
उम्मीद है कि यह वहाँ किसी को मदद करता है। पूरी तरह से इकट्ठी स्क्रिप्ट है:
#! / Bin / bash
#
# स्क्रिप्ट प्रक्रियाओं को निर्धारित करने के लिए सिस्टम लोड औसत स्तरों की जांच करने के लिए कि क्या प्रक्रियाएं हैं
# इसे अधिक मात्रा में लेना ...
#
# सेट का माहौल
dt = "तिथि +% d% b% Y-% X"
# जाहिर है, निम्नलिखित निर्देशिकाओं को बदलें जहां आपकी लॉग फाइलें वास्तव में रखी गई हैं
tmpfile = "/ tmp / checkSystemLoad.tmp"
लॉगफ़ाइल = "/ tmp / checkSystemLoad.log"
msgLog = "/ var / log / संदेश"
mysqlLog = "/ var / log / mysqld.log"
# पहला मेलस्टॉप रिपोर्टों के लिए मानक ईमेल है। दूसरा एक सेल फोन के लिए है (एक रिपोर्ट नीचे के साथ)
mailstop = "[email protected]"
mailstop1 = "[email protected]"
मशीन = "होस्ट नाम"
# निम्नलिखित तीन mytop के उपयोग के लिए हैं - एक db उपयोगकर्ता का उपयोग करें जिसमें अच्छे अधिकार हैं
dbusr = "उपयोगकर्ता नाम"
dbpw = "पासवर्ड"
db = "yourdatabasename"
# निम्नलिखित लोड स्तर पर जांच करने के लिए है - 10 वास्तव में उच्च है, इसलिए आप इसे कम करना चाह सकते हैं.
levelToCheck = 10
# सिस्टम से चर सेट करें:
LoadLevel = "cat / proc / loadavg | awk" प्रिंट $ 1 "
loadLevel = $ (प्रिंटफ़ "% 0.f" $ loadLevel)# यदि लोड स्तर आप चाहते हैं की तुलना में अधिक है, स्क्रिप्ट प्रक्रिया शुरू करें। अन्यथा, 0 से बाहर निकलें
अगर [$ loadLevel -gt $ levelToCheck]; फिर
इको ""> $ tmpfile
गूंज "*********************************"
गूंज "तिथि: $ dt" >> $ tmpfile
गूंज "सिस्टम लोड और प्रक्रियाएं जांचें" >> $ tmpfile
गूंज "*********************************"# सिस्टम से अधिक चर प्राप्त करें:
httpdProcesses = "ps -def | grep httpd | grep -v grep | wc -l"# वर्तमान लोड स्तर दिखाएं:
इको "लोड लेवल इज़: $ लोडलीवेल" >> $ tmpfile
गूंज "********************************* * >> $ tmpfile# अब चलने वाली httpd प्रक्रियाओं की संख्या दिखाएं (बच्चों को शामिल नहीं):
गूंज "httpd प्रक्रियाओं की संख्या: $ httpdProcesses" >> $ tmpfile
गूंज "********************************* * >> $ tmpfile
गूंज "" >> $ tmpfile# प्रक्रिया सूची दिखाएं:
गूंज "अब चल रही प्रक्रियाएं:" >> $ tmpfile
ps f -ef >> $ tmpfile
गूंज "********************************* * >> $ tmpfile
गूंज "" >> $ tmpfile# वर्तमान MySQL जानकारी दिखाएं:
इको "mytop से परिणाम:" >> $ tmpfile
/ usr / bin / mytop -u $ dbusr -p $ dbpw -b -d $ db >> $ tmpfile
गूंज "********************************* * >> $ tmpfile
गूंज "" >> $ tmpfile# वर्तमान शीर्ष दिखाएँ:
इको "टॉप अब दिखाता है:" >> $ tmpfile
गूंज "शीर्ष अब दिखाता है:" >> $ topfile
/ usr / bin / top -b -n1 >> $ tmpfile
/ usr / bin / top -b -n1 >> $ topfile
गूंज "********************************* * >> $ tmpfile
गूंज "" >> $ tmpfile# वर्तमान कनेक्शन दिखाएं:
इको "नेटस्टैट अब दिखाता है:" >> $ tmpfile
/ बिन / netstat -p >> $ tmpfile
गूंज "********************************* * >> $ tmpfile
गूंज "" >> $ tmpfile# डिस्क स्थान की जाँच करें
गूंज "डिस्क स्थान:" >> $ tmpfile
/ बिन / df -k >> $ tmpfile
गूंज "********************************* * >> $ tmpfile
गूंज "" >> $ tmpfile# लॉग फ़ाइल में परिणाम भेजें:
/ बिन / बिल्ली $ tmpfile >> $ logfile# और sysadmin को ईमेल परिणाम:
/ usr / bin / mutt -s "$ मशीन का उच्च लोड स्तर है! - $ dt -a $ mysqlLog -a $ msgLog $ mailstop <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ लॉगफ़ाइल# और फिर अस्थायी फ़ाइल को हटा दें:
rm $ tmpfile
rm $ टॉपफाइल
फाई#
बाहर निकलें 0