Головна » як » Діагностика Linux Server Завантаження проблем з простим сценарієм

    Діагностика Linux Server Завантаження проблем з простим сценарієм

    Якщо ви були адміністратором протягом будь-якого періоду часу, ви, безумовно, виявили ситуації, коли сервер перевершує використання процесора або використання пам'яті та / або рівні завантаження. Запуск 'top' не завжди дасть вам відповідь. Отже, як ви знайдете ті підступні процеси, які жують ваші системні ресурси, щоб убити їх?

    Наступний сценарій може допомогти. Це було написано для веб-сервера, так що є деякі його частини, які спеціально шукають httpd процеси і деякі частини, які мають справу з MySQL. Залежно від розгортання сервера просто додайте коментарі / видаляйте ці розділи та додайте інші. Його слід використовувати для відправки.

    Передумовами для цієї версії сценарію є деяка безкоштовна програма, яка випускається під ліцензією GNU General Public License під назвою mytop (доступна за адресою http://jeremy.zawodny.com/mysql/mytop/). Це старіє, але все ще чудово працює для наших цілей тут.
    Крім того, я використовую mutt як поштову скриньку - ви можете змінити скрипт, щоб просто використати утиліту "mail", побудовану в linux. Я запускаю його через крон кожну годину; налаштуйте, як вважаєте за потрібне. Ох - і цей скрипт потрібно запускати як root, оскільки він читається з деяких захищених областей сервера.

    Отже, давайте почнемо?

    Спочатку встановіть ваші змінні сценарію:

    #! / 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 = "[email protected]"
    mailstop1 = "[email protected]"
    machine = "ім'я хоста"
    Наступні три призначені для використання mytop - використовуйте користувача db, який має гідні права
    dbusr = "ім'я користувача"
    dbpw = "пароль"
    db = "yourdatabasename"
    Нижче наведено рівень навантаження для перевірки - 10 дійсно високий, тому ви можете знизити його.
    levelToCheck = 10

    Потім перевірте рівень завантаження, щоб побачити, чи слід продовжувати сценарій:

    # Встановити змінні з системи:
    loadLevel = "cat / proc / loadavg | awk" print $ 1 "
    loadLevel = $ (printf "% 0.f" $ loadLevel)

    # якщо рівень навантаження більше, ніж ви хочете, запустіть процес сценарію. В іншому випадку вийдіть 0

    if [$ loadLevel -gt $ levelToCheck]; потім
    echo ""> $ tmpfile
    echo "**************************************" >> $ tmpfile
    echo "Дата: $ dt" >> $ tmpfile
    echo "Перевірити завантаження системи та процеси" >> $ tmpfile
    echo "**************************************" >> $ tmpfile

    І продовжуйте перевірку, записуючи результати у тимчасовий файл. Додайте або видаліть елементи звідси, якщо це стосується вашої ситуації:

    # Отримати більше змінних з системи:
    httpdProcesses = "ps -def | grep httpd | grep -v grep | wc -l"

    # Показати поточний рівень завантаження:
    echo "Рівень завантаження: $ loadLevel" >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile

    # Показати кількість запущених HTTP-процесів (не включаючи дітей):
    echo "Кількість потоків httpd: $ httpdProcesses" >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" $ tmpfile

    # Показати список процесів:
    echo "Тепер виконуються процеси:" >> $ tmpfile
    ps f -ef >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" $ tmpfile

    # Показати поточну інформацію про MySQL:
    echo "Результати з mytop:" >> $ tmpfile
    / usr / bin / mytop -u $ dbusr -p $ dbpw -b -d $ db >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" $ tmpfile

    Зверніть увагу на команду top, ми записуємо до двох тимчасових файлів. Один для набагато меншого повідомлення на мобільний телефон. Якщо ви не бажаєте терміново оповіщати про стільниковий телефон о 3 ранку, ви можете це зробити (і винесіть другий порядок розсилки пізніше в сценарії).


    # Показати поточну версію:
    echo "top now показує:" >> $ tmpfile
    echo "top now показує:" >> $ topfile
    / usr / bin / top -b -n1 >> $ tmpfile
    / usr / bin / top -b -n1 >> $ topfile
    echo "************************************************ * ">> $ tmpfile
    echo "" $ tmpfile

    Більше перевірок:


    # Показати поточні з'єднання:
    echo "netstat тепер показує:" >> $ tmpfile
    / bin / netstat -p >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" $ tmpfile

    # Перевірте місце на диску
    echo "дисковий простір:" >> $ tmpfile
    / bin / df -k >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" $ tmpfile

    Потім напишіть вміст тимчасового файлу до більш постійного файлу журналу та надішліть результати відповідним сторонам. Друга розсилка - це скорочені результати, що складаються просто зі стандарту з 'top':

    # Надіслати результати у файл журналу:
    / bin / cat $ tmpfile >> $ logfile

    # І електронною поштою результати до sysadmin:
    / usr / bin / mutt -s "$ machine має високий рівень завантаження! - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ logfile

    А потім - деяке домашнє господарство і вихід:

    # А потім видалити тимчасовий файл:
    rm $ tmpfile
    rm $ topfile
    fi

    #
    exit 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 = "[email protected]"
    mailstop1 = "[email protected]"
    machine = "ім'я хоста"
    Наступні три призначені для використання mytop - використовуйте користувача db, який має гідні права
    dbusr = "ім'я користувача"
    dbpw = "пароль"
    db = "yourdatabasename"
    Нижче наведено рівень навантаження для перевірки - 10 дійсно високий, тому ви можете знизити його.
    levelToCheck = 10
    # Встановити змінні з системи:
    loadLevel = "cat / proc / loadavg | awk" print $ 1 "
    loadLevel = $ (printf "% 0.f" $ loadLevel)

    # якщо рівень навантаження більше, ніж ви хочете, запустіть процес сценарію. В іншому випадку вийдіть 0

    if [$ loadLevel -gt $ levelToCheck]; потім
    echo ""> $ tmpfile
    echo "**************************************" >> $ tmpfile
    echo "Дата: $ dt" >> $ tmpfile
    echo "Перевірити завантаження системи та процеси" >> $ tmpfile
    echo "**************************************" >> $ tmpfile

    # Отримати більше змінних з системи:
    httpdProcesses = "ps -def | grep httpd | grep -v grep | wc -l"

    # Показати поточний рівень завантаження:
    echo "Рівень завантаження: $ loadLevel" >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile

    # Показати кількість запущених HTTP-процесів (не включаючи дітей):
    echo "Кількість потоків httpd: $ httpdProcesses" >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" $ tmpfile

    # Показати список процесів:
    echo "Тепер виконуються процеси:" >> $ tmpfile
    ps f -ef >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" $ tmpfile

    # Показати поточну інформацію про MySQL:
    echo "Результати з mytop:" >> $ tmpfile
    / usr / bin / mytop -u $ dbusr -p $ dbpw -b -d $ db >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" $ tmpfile

    # Показати поточну версію:
    echo "top now показує:" >> $ tmpfile
    echo "top now показує:" >> $ topfile
    / usr / bin / top -b -n1 >> $ tmpfile
    / usr / bin / top -b -n1 >> $ topfile
    echo "************************************************ * ">> $ tmpfile
    echo "" $ tmpfile

    # Показати поточні з'єднання:
    echo "netstat тепер показує:" >> $ tmpfile
    / bin / netstat -p >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" $ tmpfile

    # Перевірте місце на диску
    echo "дисковий простір:" >> $ tmpfile
    / bin / df -k >> $ tmpfile
    echo "************************************************ * ">> $ tmpfile
    echo "" $ tmpfile

    # Надіслати результати у файл журналу:
    / bin / cat $ tmpfile >> $ logfile

    # І електронною поштою результати до sysadmin:
    / usr / bin / mutt -s "$ machine має високий рівень завантаження! - $ dt" -a $ mysqlLog -a $ msgLog $ mailstop <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ logfile

    # А потім видалити тимчасовий файл:
    rm $ tmpfile
    rm $ topfile
    fi

    #
    exit 0