หากคุณเป็นผู้ดูแลระบบมานานแล้วคุณได้ค้นพบสถานการณ์ที่เซิร์ฟเวอร์เพิ่มขึ้นอย่างรวดเร็วในการใช้ CPU หรือการใช้หน่วยความจำและ / หรือระดับการโหลด การวิ่ง "บนสุด" จะไม่ให้คำตอบเสมอไปเช่นกัน แล้วคุณจะพบกระบวนการลับๆเหล่านั้นที่กำลังเคี้ยวทรัพยากรระบบของคุณเพื่อให้สามารถฆ่าพวกเขาได้อย่างไร?
สคริปต์ต่อไปนี้อาจช่วยได้ มันถูกเขียนขึ้นสำหรับเว็บเซิร์ฟเวอร์ดังนั้นจึงมีบางส่วนที่มองหากระบวนการ httpd โดยเฉพาะและบางส่วนที่จัดการกับ MySQL ขึ้นอยู่กับการปรับใช้เซิร์ฟเวอร์ของคุณเพียงแค่แสดงความคิดเห็น / ลบส่วนเหล่านั้นและเพิ่มส่วนอื่น ๆ ควรใช้สำหรับจุดเริ่มต้น
ข้อกำหนดเบื้องต้นสำหรับสคริปต์เวอร์ชันนี้คือฟรีแวร์บางตัวที่เผยแพร่ภายใต้สัญญาอนุญาตสาธารณะทั่วไปของ GNU ที่เรียกว่า mytop (มีให้ที่
http://jeremy.zawodny.com/mysql/mytop/
) ซึ่งเป็นเครื่องมือที่ยอดเยี่ยมสำหรับการตรวจสอบประสิทธิภาพของ MySQL มันเริ่มเก่าแล้ว แต่ก็ยังใช้งานได้ดีสำหรับจุดประสงค์ของเราที่นี่
นอกจากนี้ฉันใช้ mutt เป็นผู้รับจดหมาย - คุณอาจต้องการเปลี่ยนสคริปต์เพื่อใช้ลินุกซ์ที่สร้างขึ้นในยูทิลิตี้ "mail" ฉันเรียกใช้ cron ทุกชั่วโมง ปรับตามที่เห็นสมควร โอ้ - และสคริปต์นี้ต้องทำงานในฐานะรูทเนื่องจากอ่านจากพื้นที่ที่มีการป้องกันบางส่วนของเซิร์ฟเวอร์
มาเริ่มกันเลยดีกว่า
ขั้นแรกตั้งค่าตัวแปรสคริปต์ของคุณ:
#! / บิน / ทุบ
#
# สคริปต์เพื่อตรวจสอบระดับเฉลี่ยการโหลดของระบบเพื่อพยายามกำหนด
# กระบวนการอะไรที่มันสูงเกินไป ...
#
# 07Jul2010 tjones
#
# กำหนดสภาพแวดล้อม
dt = `วันที่ +% d% b% Y-% X`
# แน่นอนเปลี่ยนไดเร็กทอรีต่อไปนี้เป็นที่เก็บไฟล์บันทึกของคุณ
tmpfile = "/ tmp / checkSystemLoad.tmp"
logfile = "/ tmp / checkSystemLoad.log"
msgLog = "/ var / บันทึก / ข้อความ"
บันทึก mysql = "/ var / log / mysqld.log"
# mailstop แรกคืออีเมลมาตรฐานสำหรับรายงาน อันที่สองสำหรับโทรศัพท์มือถือ (พร้อมรายงานแยกส่วน)
mailstop = "[email protected]"
mailstop1 = "[email protected]"
เครื่อง = "ชื่อโฮสต์"
# สามต่อไปนี้ใช้สำหรับการใช้งาน mytop - ใช้ผู้ใช้ฐานข้อมูลที่มีสิทธิ์ที่เหมาะสม
dbusr = "ชื่อผู้ใช้"
dbpw = "รหัสผ่าน"
db = "yourdatabasename"
# ต่อไปนี้เป็นระดับการโหลดที่จะตรวจสอบ - 10 สูงมากดังนั้นคุณอาจต้องการลดระดับลง
levelToCheck = 10
จากนั้นตรวจสอบระดับการโหลดของคุณเพื่อดูว่าสคริปต์ควรดำเนินการต่อหรือไม่:
# ตั้งค่าตัวแปรจากระบบ:
loadLevel = `cat / proc / loadavg | awk '{print $1}'`
loadLevel = $ (printf "% 0.f" $ loadLevel)# หากระดับการโหลดมากกว่าที่คุณต้องการให้เริ่มกระบวนการสคริปต์ มิฉะนั้นออกจาก 0
ถ้า [ $loadLevel -gt $levelToCheck ]; แล้ว
echo ""> $ tmpfile
echo "**************************************" >> $ tmpfile
echo "วันที่: $ dt" >> $ tmpfile
echo "ตรวจสอบการโหลดและกระบวนการของระบบ" >> $ tmpfile
echo "**************************************" >> $ tmpfile