Nếu bạn đã là quản trị viên trong bất kỳ khoảng thời gian nào, bạn chắc chắn đã phát hiện ra các tình huống mà máy chủ tăng đột biến trong việc sử dụng CPU hoặc sử dụng bộ nhớ và / hoặc mức tải. Chạy `top` cũng không phải lúc nào cũng cho bạn câu trả lời. Vậy làm cách nào để tìm ra những tiến trình lén lút đang ngốn tài nguyên hệ thống của bạn để có thể giết chúng?
Tập lệnh sau có thể giúp bạn. Nó được viết cho một máy chủ web, vì vậy có một số phần của nó đang tìm kiếm các quy trình httpd và một số phần xử lý MySQL. Tùy thuộc vào việc triển khai máy chủ của bạn, chỉ cần nhận xét / xóa các phần đó và thêm những phần khác. Nó nên được sử dụng cho một điểm khởi đầu.
Điều kiện tiên quyết cho phiên bản này của tập lệnh là một số phần mềm miễn phí được phát hành theo Giấy phép Công cộng GNU được gọi là mytop (có sẵn tại
http://jeremy.zawodny.com/mysql/mytop/
) là một công cụ tuyệt vời để kiểm tra MySQL đang hoạt động như thế nào. Nó đang cũ đi, nhưng vẫn hoạt động tốt cho các mục đích của chúng tôi ở đây.
Ngoài ra, tôi sử dụng mutt làm bưu phẩm - bạn có thể muốn thay đổi tập lệnh để chỉ cần sử dụng tiện ích linux được tích hợp sẵn trong `mail`. Tôi chạy nó qua cron mỗi giờ; điều chỉnh khi bạn thấy phù hợp. Ồ - và tập lệnh này cần phải chạy dưới dạng root vì nó đọc từ một số khu vực được bảo vệ của máy chủ.
Vì vậy, chúng ta hãy bắt đầu, phải không?
Trước tiên, hãy đặt các biến tập lệnh của bạn:
#! / Bin / Bash
#
# Tập lệnh để kiểm tra mức tải trung bình của hệ thống để cố gắng xác định
# quy trình nào đang đưa nó quá cao ...
#
# 07Jul2010 tjones
#
# thiết lập môi trường
dt = `ngày +% d% b% Y-% X`
# Rõ ràng, hãy thay đổi các thư mục sau thành nơi thực sự lưu giữ các tệp nhật ký của bạn
tmpfile = "/ tmp / checkSystemLoad.tmp"
logfile = "/ tmp / checkSystemLoad.log"
msgLog = "/ var / log / messages"
mysql Log = "/ var / log / mysqld.log"
# cửa sổ đầu tiên là email chuẩn cho các báo cáo. Thứ hai dành cho điện thoại di động (với báo cáo giảm dần)
mailstop = "[email protected]"
mailstop1 = "[email protected]"
machine = `hostname`
# Ba điều sau đây là để sử dụng mytop - sử dụng người dùng db có các quyền tốt
dbusr = "tên người dùng"
dbpw = "mật khẩu"
db = "yourdatabasename"
# Sau đây là mức tải cần kiểm tra - 10 là thực sự cao, vì vậy bạn có thể muốn giảm nó xuống.
levelToCheck = 10
Tiếp theo, hãy kiểm tra mức tải của bạn để xem liệu tập lệnh có tiếp tục hay không:
# Đặt các biến từ hệ thống:
loadLevel = `cat / proc / loadavg | awk '{print $1}' '
loadLevel = $ (printf "% 0.f" $ loadLevel)# nếu mức tải lớn hơn bạn muốn, hãy bắt đầu quá trình tập lệnh. Nếu không, thoát 0
nếu [ $loadLevel -gt $levelToCheck ]; sau đó
echo ""> $ tmpfile
echo "**************************************" >> $ tmpfile
echo "Ngày: $ dt" >> $ tmpfile
echo "Kiểm tra quá trình và tải hệ thống" >> $ tmpfile
echo "**************************************" >> $ tmpfile