Anasayfa » nasıl » Basit Bir Komut Dosyası ile Linux Sunucu Yükü Sorunlarını Teşhis Edin

    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