לאבחן בעיות שרת לינוקס לטעון עם סקריפט פשוט
אם אתה כבר מנהל עבור כל אורך הזמן, יש לך בהחלט גילה מצבים שבהם שרת spikes ב CPU או להשתמש בזיכרון ו / או רמות לטעון. הפעלת 'הדף' לא תמיד לתת לך את התשובה, או. אז איך אתה מוצא את אלה תהליכים ערמומי כי הם לעיסה משאבי המערכת שלך כדי להיות מסוגל להרוג אותם?
ייתכן שהסקריפט הבא יוכל לעזור. זה נכתב עבור שרת אינטרנט, אז יש כמה חלקים ממנו כי הם מחפשים במיוחד תהליכים httpd וחלקים כי להתמודד עם MySQL. בהתאם לפריסת השרת שלך, פשוט כתוב / מחק קטעים אלה והוסף אחרים. יש להשתמש בו לנקודת התחלה.
דרישות מוקדמות עבור גירסה זו של הסקריפט הוא כמה freeware שפורסמו תחת הרשיון הציבורי הכללי GNU שנקרא mytop (זמין ב http://jeremy.zawodny.com/mysql/mytop/) שהוא כלי נפלא לבדיקת הביצועים של MySQL. זה מזדקן, אבל עדיין עובד נהדר למטרות שלנו כאן.
בנוסף, אני משתמש מאט כמו הדיוור - ייתכן שתרצה לשנות את התסריט פשוט להשתמש לינוקס מובנה השירות "דואר". אני מפעיל את זה דרך cron כל שעה; להתאים כפי שאתה רואה לנכון. אה - ואת התסריט הזה צריך לרוץ כמו השורש שכן הוא קורא מתוך כמה אזורים מוגנים של השרת.
אז בואו נתחיל, בסדר?
ראשית, הגדר את משתני הסקריפט שלך:
#! / bin / bash
#
# סקריפט לבדוק את רמות הטעינה הממוצע של המערכת כדי לנסות לקבוע
# אילו תהליכים לוקחים את זה גבוה מדי ...
#
# 07Jul2010 tjones
#
# הגדרת הסביבה
dt = "תאריך +% d% b% Y-% X"
# ברור, לשנות את הספריות הבאות למקום שבו קבצי יומן שלך למעשה נשמרים
tmpfile = "/ tmp / checkSystemLoad.tmp"
logfile = "/ tmp / checkSystemLoad.log"
msgLog = "/ var / log / messages"
mysqlLog = "/ var / log / mysqld.log"
# mailstop הראשון הוא דוא"ל רגיל עבור דוחות. השני הוא עבור הטלפון הסלולרי (עם דוח למטה למטה)
mailstop = "[email protected]"
mailstop1 = "[email protected]"
מכונה = "hostname"
# שלושה הבאים הם לשימוש mytop - משתמש db כי יש זכויות הגון
dbusr = "שם המשתמש"
dbpw = "סיסמה"
db = "yourdatabasename"
# להלן רמת העומס לבדוק - 10 הוא גבוה באמת, אז אולי כדאי להוריד את זה.
levelToCheck = 10
לאחר מכן, בדוק את רמת הטעינה שלך כדי לראות אם יש להמשיך את הסקריפט:
# הגדר משתנים מהמערכת:
loadLevel = "cat / proc / loadavg | awk" print $ 1 "
loadLevel = $ (printf "% 0.f" $ loadLevel)# אם רמת העומס גדולה יותר ממה שאתה רוצה, להתחיל את תהליך התסריט. אחרת, צא 0
אם [$ loadLevel -gt $ levelToCheck]; לאחר מכן
הד "> $ tmpfile
הד "**************************************" >> $ tmpfile
הד "תאריך: $ dt" >> $ tmpfile
הד "בדוק את עומס המערכת ותהליכים" >> $ tmpfile
הד "**************************************" >> $ tmpfile
ולהמשיך דרך המחאות, לכתוב את התוצאות לקובץ זמני. הוסף או מחק פריטים מכאן, כאשר הם רלוונטיים למצב שלך:
# קבל משתנים נוספים מהמערכת:
httpdProcesses = "ps -def | grep httpd | grep -v grep | wc -l"# הצג את רמת הטעינה הנוכחית:
הד "רמת טעינה היא: $ loadLevel" >> $ 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
בדיקות נוספות:
# הצג חיבורים נוכחיים:
הד "netstat עכשיו מראה:" >> $ tmpfile
/ bin / netstat -p >> $ tmpfile
הד "************************************************ * ">> $ tmpfile
הד "" $ tmpfile# בדוק את שטח הדיסק
הד "שטח דיסק:" >> $ tmpfile
/ bin / df -k >> $ tmpfile
הד "************************************************ * ">> $ tmpfile
הד "" $ tmpfile
לאחר מכן לכתוב את תוכן הקובץ הזמני לקובץ יומן קבוע יותר ולשלוח את התוצאות בדוא"ל לצדדים המתאימים. הדיוור השני הוא את התוצאות למטה למטה המורכב פשוט של תקן מתוך "הדף":
# שלח תוצאות לקובץ יומן:
/ bin / cat $ tmpfile >> $ logfile# ו- Email תוצאות ל- sysadmin:
/ usr / bin / mutt -s "$ machine יש רמת עומס גבוהה! - $ dt" - $ mysqlLog-$ $ msgLog $ mailstop <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ logfile
ואז קצת משק הבית ולצאת:
# ולאחר מכן הסר את קובץ ה- temp:
rm $ tmpfile
rm $
Fi#
יציאה 0
אני מקווה שזה עוזר למישהו שם בחוץ. התסריט המורכב במלואו הוא:
#! / bin / bash
#
# סקריפט לבדוק את רמות הטעינה הממוצע של המערכת כדי לנסות לקבוע אילו תהליכים הם
# לוקח את זה גבוה מדי ...
#
# הגדרת הסביבה
dt = "תאריך +% d% b% Y-% X"
# ברור, לשנות את הספריות הבאות למקום שבו קבצי יומן שלך למעשה נשמרים
tmpfile = "/ tmp / checkSystemLoad.tmp"
logfile = "/ tmp / checkSystemLoad.log"
msgLog = "/ var / log / messages"
mysqlLog = "/ var / log / mysqld.log"
# mailstop הראשון הוא דוא"ל רגיל עבור דוחות. השני הוא עבור הטלפון הסלולרי (עם דוח למטה למטה)
mailstop = "[email protected]"
mailstop1 = "[email protected]"
מכונה = "hostname"
# שלושה הבאים הם לשימוש mytop - משתמש db כי יש זכויות הגון
dbusr = "שם המשתמש"
dbpw = "סיסמה"
db = "yourdatabasename"
# להלן רמת העומס לבדוק - 10 הוא גבוה באמת, אז אולי כדאי להוריד את זה.
levelToCheck = 10
# הגדר משתנים מהמערכת:
loadLevel = "cat / proc / loadavg | awk" print $ 1 "
loadLevel = $ (printf "% 0.f" $ loadLevel)# אם רמת העומס גדולה יותר ממה שאתה רוצה, להתחיל את תהליך התסריט. אחרת, צא 0
אם [$ loadLevel -gt $ levelToCheck]; לאחר מכן
הד "> $ tmpfile
הד "**************************************" >> $ tmpfile
הד "תאריך: $ dt" >> $ tmpfile
הד "בדוק את עומס המערכת ותהליכים" >> $ tmpfile
הד "**************************************" >> $ tmpfile# קבל משתנים נוספים מהמערכת:
httpdProcesses = "ps -def | grep httpd | grep -v grep | wc -l"# הצג את רמת הטעינה הנוכחית:
הד "רמת טעינה היא: $ loadLevel" >> $ 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# הצג חיבורים נוכחיים:
הד "netstat עכשיו מראה:" >> $ tmpfile
/ bin / netstat -p >> $ tmpfile
הד "************************************************ * ">> $ tmpfile
הד "" $ tmpfile# בדוק את שטח הדיסק
הד "שטח דיסק:" >> $ tmpfile
/ bin / df -k >> $ tmpfile
הד "************************************************ * ">> $ tmpfile
הד "" $ tmpfile# שלח תוצאות לקובץ יומן:
/ bin / cat $ tmpfile >> $ logfile# ו- Email תוצאות ל- sysadmin:
/ usr / bin / mutt -s "$ machine יש רמת עומס גבוהה! - $ dt" - $ mysqlLog-$ $ msgLog $ mailstop <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ logfile# ולאחר מכן הסר את קובץ ה- temp:
rm $ tmpfile
rm $
Fi#
יציאה 0