Basit Bir Komut Dosyası ile Linux Sunucu Yükü Sorunlarını Teşhis Edin
Herhangi bir süre boyunca yöneticiyseniz, bir sunucunun CPU kullanımında veya bellek kullanımında ve / veya yükleme seviyelerinde yükseldiği durumları kesinlikle keşfettiniz. 'Top' lansmanı da her zaman size cevap vermez. Öyleyse, sistem kaynaklarını, onları öldürebilmek için çiğneyen sinsi süreçleri nasıl buluyorsunuz??
Aşağıdaki komut dosyası yardımcı olabilir. Bir web sunucusu için yazılmış, bu yüzden özellikle httpd işlemlerini ve MySQL ile ilgilenen bazı kısımlarını arayan bazı bölümleri var. Sunucunuzun dağıtımına bağlı olarak, bu bölümleri yorumlayın / silin ve başkalarını ekleyin. Bir başlangıç noktası için kullanılmalıdır.
Bu betiğin önkoşulları, GNU Genel Kamu Lisansı altında MySQL'in nasıl performans gösterdiğini kontrol etmek için harika bir araçtır. Yaşlanıyor, ancak yine de amaçlarımız için harika çalışıyor..
Ek olarak, postalayıcı olarak mutt kullanıyorum - betiği 'mail' yardımcı programında yerleşik olan linux'u kullanmak için değiştirmek isteyebilirsiniz. Her saat cron üzerinden çalıştırıyorum; uygun gördüğünüz gibi ayarlayın. Oh - ve bu betiğin, sunucunun korunan bazı alanlarından okuduğu için root olarak çalıştırılması gerekiyor..
Hadi başlayalım, olur mu?
İlk önce, script değişkenlerinizi ayarlayın:
#! / Bin / bash
#
# Belirlemeye çalışmak üzere sistem yükü ortalama seviyelerini kontrol etmek için komut dosyası
# Hangi süreçler aşırı yüksek alıyor?
#
# 07Jul2010 tjones
#
# ortam ayarla
dt = "tarih +% d% b% Y -% X"
# Açıkçası, aşağıdaki dizinleri günlük dosyalarınızın gerçekte saklandığı yerlere değiştirin
tmpfile = "/ tmp / checkSystemLoad.tmp"
günlük dosyası = "/ tmp / checkSystemLoad.log"
msgLog = "/ var / log / messages"
mysqlLog = "/ var / log / mysqld.log"
# ilk posta adresi raporlar için standart e-posta. İkincisi, cep telefonu içindir (aşağıya eğilmiş bir raporla)
mailstop = "[email protected]"
mailstop1 = "[email protected]"
Makine = "makine adı"
# Aşağıdaki üç tanesi mytop kullanımına yöneliktir - uygun haklara sahip bir db kullanıcısı kullanın
dbusr = "kullanıcı adı"
dbpw = "parola"
db = "yourdatabasename"
# Aşağıdakiler kontrol edilmesi gereken yük seviyesidir - 10 gerçekten çok yüksektir, dolayısıyla düşürmek isteyebilirsiniz.
levelToCheck = 10
Ardından, komut dosyasının devam edip etmeyeceğini görmek için yükleme seviyenizi kontrol edin:
# Sistemden değişkenleri ayarla:
loadLevel = "cat / proc / loadavg | awk" print $ 1 "
loadLevel = $ (printf "% 0.f" $ loadLevel)# eğer yükleme seviyesi istediğinden büyükse, script işlemine başla. Aksi takdirde, 0 çıkın
if [$ loadLevel -gt $ levelToCheck]; sonra
yankı ""> $ tmpfile
echo "******************************************" >> $ tmpfile
echo "Tarih: $ dt" >> $ tmpfile
echo "Sistem Yükünü ve Süreçlerini Kontrol Et" >> $ tmpfile
echo "******************************************" >> $ tmpfile
Ve sonuçları geçici dosyaya yazarak kontrollere devam edin. Durumunuza uygun olan durumlarda buradan öğeleri ekleyin veya silin:
# Sistemden daha fazla değişken al:
httpdProcesses = "ps -def | grep httpd | grep -v grep | wc -l"# Geçerli yük seviyesini göster:
echo "Yük Seviyesi: $ loadLevel" >> $ tmpfile
Eko "************************************************ * ">> $ tmpfile# Çalışmakta olan httpd işlemlerinin sayısını göster (çocuklar dahil değil):
echo "Şimdi httpd işlemlerinin sayısı: $ httpdProcesses" >> $ tmpfile
Eko "************************************************ * ">> $ tmpfile
yankı "" >> $ tmpfile# İşlem listesini göster:
echo "Çalışmakta olan işlemler:" >> $ tmpfile
ps f-ef >> $ tmpfile
Eko "************************************************ * ">> $ tmpfile
yankı "" >> $ tmpfile# Mevcut MySQL bilgisini göster:
echo "Mytop'tan sonuçlar:" >> $ tmpfile
/ usr / bin / mytop -u $ dbusr -p $ dbpw -b -d $ db >> $ tmpfile
Eko "************************************************ * ">> $ tmpfile
yankı "" >> $ tmpfile
Üst komut ile dikkat, iki geçici dosyaya yazıyoruz. Birincisi, cep telefonuna çok daha küçük bir mesaj. Sabahın üçünde cep telefonu uyarılarının aciliyetini istemiyorsanız, bunu çıkarabilirsiniz (ve ikinci postalama yordamını daha sonra komut dosyasında alabilirsiniz).
# Şu anki olanı göster:
yankı "top şimdi gösterir:" >> $ tmpfile
yankı "top şimdi gösterir:" >> $ topfile
/ usr / bin / top -b -n1 >> $ tmpfile
/ usr / bin / top -b -n1 >> $ üst dosya
Eko "************************************************ * ">> $ tmpfile
yankı "" >> $ tmpfile
Daha fazla çek:
# Mevcut bağlantıları göster:
echo "netstat şimdi gösteriyor:" >> $ tmpfile
/ bin / netstat -p >> $ tmpfile
Eko "************************************************ * ">> $ tmpfile
yankı "" >> $ tmpfile# Disk alanını kontrol et
echo "disk alanı:" >> $ tmpfile
/ bin / df -k >> $ tmpfile
Eko "************************************************ * ">> $ tmpfile
yankı "" >> $ tmpfile
Ardından geçici dosya içeriğini daha kalıcı bir günlük dosyasına yazın ve sonuçları uygun taraflara e-postayla gönderin. İkinci postalama, basitçe 'üstteki' standardın oluşturduğu aşağı yönlü sonuçlardır:
# Günlük dosyasına sonuçları gönder:
/ bin / cat $ tmpfile >> $ günlük dosyası# Ve sysadmin'e e-posta sonuçları:
/ usr / bin / mutt -s "$ makine yüksek yük seviyesine sahip! - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ günlük dosyası
Ve sonra bazı temizlik ve çıkış:
# Ve sonra temp dosyasını kaldırın:
rm $ tmpfile
rm $ topdosyası
fi#
Çıkış 0
Umarım bu dışarıdaki birine yardım eder. Tamamen birleştirilmiş komut dosyası:
#! / Bin / bash
#
# İşlemlerin ne olduğunu belirlemeye çalışmak için sistemin yükleme ortalama seviyelerini kontrol etmek için komut dosyası
# aşırı yüksek alarak ...
#
# ortam ayarla
dt = "tarih +% d% b% Y -% X"
# Açıkçası, aşağıdaki dizinleri günlük dosyalarınızın gerçekte saklandığı yerlere değiştirin
tmpfile = "/ tmp / checkSystemLoad.tmp"
günlük dosyası = "/ tmp / checkSystemLoad.log"
msgLog = "/ var / log / messages"
mysqlLog = "/ var / log / mysqld.log"
# ilk posta adresi raporlar için standart e-posta. İkincisi, cep telefonu içindir (aşağıya eğilmiş bir raporla)
mailstop = "[email protected]"
mailstop1 = "[email protected]"
Makine = "makine adı"
# Aşağıdaki üç tanesi mytop kullanımına yöneliktir - uygun haklara sahip bir db kullanıcısı kullanın
dbusr = "kullanıcı adı"
dbpw = "parola"
db = "yourdatabasename"
# Aşağıdakiler kontrol edilmesi gereken yük seviyesidir - 10 gerçekten çok yüksektir, dolayısıyla düşürmek isteyebilirsiniz.
levelToCheck = 10
# Sistemden değişkenleri ayarla:
loadLevel = "cat / proc / loadavg | awk" print $ 1 "
loadLevel = $ (printf "% 0.f" $ loadLevel)# eğer yükleme seviyesi istediğinden büyükse, script işlemine başla. Aksi takdirde, 0 çıkın
if [$ loadLevel -gt $ levelToCheck]; sonra
yankı ""> $ tmpfile
echo "******************************************" >> $ tmpfile
echo "Tarih: $ dt" >> $ tmpfile
echo "Sistem Yükünü ve Süreçlerini Kontrol Et" >> $ tmpfile
echo "******************************************" >> $ tmpfile# Sistemden daha fazla değişken al:
httpdProcesses = "ps -def | grep httpd | grep -v grep | wc -l"# Geçerli yük seviyesini göster:
echo "Yük Seviyesi: $ loadLevel" >> $ tmpfile
Eko "************************************************ * ">> $ tmpfile# Çalışmakta olan httpd işlemlerinin sayısını göster (çocuklar dahil değil):
echo "Şimdi httpd işlemlerinin sayısı: $ httpdProcesses" >> $ tmpfile
Eko "************************************************ * ">> $ tmpfile
yankı "" >> $ tmpfile# İşlem listesini göster:
echo "Çalışmakta olan işlemler:" >> $ tmpfile
ps f-ef >> $ tmpfile
Eko "************************************************ * ">> $ tmpfile
yankı "" >> $ tmpfile# Mevcut MySQL bilgisini göster:
echo "Mytop'tan sonuçlar:" >> $ tmpfile
/ usr / bin / mytop -u $ dbusr -p $ dbpw -b -d $ db >> $ tmpfile
Eko "************************************************ * ">> $ tmpfile
yankı "" >> $ tmpfile# Şu anki olanı göster:
yankı "top şimdi gösterir:" >> $ tmpfile
yankı "top şimdi gösterir:" >> $ topfile
/ usr / bin / top -b -n1 >> $ tmpfile
/ usr / bin / top -b -n1 >> $ üst dosya
Eko "************************************************ * ">> $ tmpfile
yankı "" >> $ tmpfile# Mevcut bağlantıları göster:
echo "netstat şimdi gösteriyor:" >> $ tmpfile
/ bin / netstat -p >> $ tmpfile
Eko "************************************************ * ">> $ tmpfile
yankı "" >> $ tmpfile# Disk alanını kontrol et
echo "disk alanı:" >> $ tmpfile
/ bin / df -k >> $ tmpfile
Eko "************************************************ * ">> $ tmpfile
yankı "" >> $ tmpfile# Günlük dosyasına sonuçları gönder:
/ bin / cat $ tmpfile >> $ günlük dosyası# Ve sysadmin'e e-posta sonuçları:
/ usr / bin / mutt -s "$ makine yüksek yük seviyesine sahip! - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ günlük dosyası# Ve sonra temp dosyasını kaldırın:
rm $ tmpfile
rm $ topdosyası
fi#
Çıkış 0