Дијагностицирајте Линук Сервер Проблеми са једноставним скриптом
Ако сте били админ у било ком временском периоду, свакако сте открили ситуације у којима се сервер повећава у коришћењу ЦПУ-а или коришћења меморије и / или нивоа оптерећења. Покретање 'топ' неће вам увек дати одговор. Дакле, како ћете пронаћи оне тајне процесе који жвачу ваше системске ресурсе да би их могли убити?
Следећа скрипта би могла помоћи. Написано је за веб сервер, тако да има и неке његове делове који су посебно у потрази за хттпд процесима и неким деловима који се баве МиСКЛ-ом. У зависности од имплементације вашег сервера, једноставно коментаришите / избришите те секције и додајте друге. Требало би да се користи за почетну тачку.
Предуслови за ову верзију скрипте су неки бесплатни програми објављени под ГНУ Генерал Публиц Лиценсе названом митоп (доступно на хттп://јереми.заводни.цом/мискл/митоп/), што је фантастично средство за проверу како МиСКЛ ради. Постаје стар, али и даље одлично ради за наше потребе.
Осим тога, користим мутт као маилер - можда желите промијенити скрипту тако да једноставно користите линук изграђен у 'маил' услужном програму. Покрећем га преко црон сваког сата; подесите како вам одговара. Ох - и ова скрипта треба да се покрене као роот јер чита из неких заштићених области на серверу.
Хајде да почнемо?
Прво, подесите променљиве скрипте:
#! / бин / басх
#
# Скрипта за проверу просечних нивоа оптерећења система да би се покушало одредити
# који процеси га узимају превисоко ...
#
# 07Јул2010 тјонес
#
# сет енвиронмент
дт = "датум +% д% б% И-% Кс"
# Очигледно, промените следеће директоријуме где се заправо чувају ваши лог фајлови
тмпфиле = "/ тмп / цхецкСистемЛоад.тмп"
логфиле = "/ тмп / цхецкСистемЛоад.лог"
мсгЛог = "/ вар / лог / мессагес"
мисклЛог = "/ вар / лог / мисклд.лог"
# први маилстоп је стандардна е-пошта за извештаје. Други је за мобилни телефон (са смањеним извештајем)
маилстоп = "сисадмин@мидомаин.цом"
маилстоп1 = "15555555555@мицеллпхоне.цом"
мацхине = "хостнаме"
Следећа три су за митоп употребу - користите дб корисника који има пристојна права
дбуср = "корисничко име"
дбпв = "лозинка"
дб = "твојдатабасенаме"
# Следи ниво оптерећења за провјеру - 10 је стварно висок, тако да га можете смањити.
левелТоЦхецк = 10
Затим проверите ниво оптерећења да бисте видели да ли скрипта треба да се настави:
# Постави променљиве из система:
лоадЛевел = "цат / проц / лоадавг | авк" принт $ 1
лоадЛевел = $ (принтф "% 0.ф" $ лоадЛевел)# ако је ниво оптерећења већи него што желите, покрените процес скрипте. Иначе, излаз 0
иф [$ лоадЛевел -гт $ левелТоЦхецк]; онда
ецхо ""> $ тмпфиле
ецхо "**************************************" >> $ тмпфиле
ецхо "Дате: $ дт" >> $ тмпфиле
ецхо "Цхецк Систем Лоад & Процессес" >> $ тмпфиле
ецхо "**************************************" >> $ тмпфиле
И наставите провјере, уписујући резултате у привремену датотеку. Додајте или избришите ставке одавде где је применљиво у вашој ситуацији:
# Добијте више променљивих из система:
хттпдПроцессес = "пс -деф | греп хттпд | греп -в греп | вц -л"# Прикажи тренутни ниво оптерећења:
ецхо "Лоад Левел Ис: $ лоадЛевел" >> $ тмпфиле
одјек "************************************************ * ">> $ тмпфиле# Прикажи број ХТТПд процеса који се тренутно извршавају (не укључујући децу):
ецхо "Број хттпд процеса сада: $ хттпдПроцессес" >> $ тмпфиле
одјек "************************************************ * ">> $ тмпфиле
ецхо "" >> $ тмпфиле# Прикажи листу процеса:
ецхо "Процеси су сада покренути:" >> $ тмпфиле
пс ф-фиф >> $ тмпфиле
одјек "************************************************ * ">> $ тмпфиле
ецхо "" >> $ тмпфиле# Прикажи тренутну МиСКЛ информацију:
ецхо "Резултати из митоп:" >> $ тмпфиле
/ уср / бин / митоп -у $ дбуср -п $ дбпв -б -д $ дб >> $ тмпфиле
одјек "************************************************ * ">> $ тмпфиле
ецхо "" >> $ тмпфиле
Обратите пажњу на врх команду, ми пишемо на две темп датотеке. Један је за много мању поруку за мобилни телефон. Ако не желите хитност упозорења на мобилни телефон у три ујутро, можете то да извадите (и да касније преузмете другу рутину слања у скрипту).
# Прикажи тренутни врх:
ецхо "топ нов сховс:" >> $ тмпфиле
ецхо "топ нов сховс:" >> $ топфиле
/ уср / бин / топ -б -н1 >> $ тмпфиле
/ уср / бин / топ -б -н1 >> $ топфиле
одјек "************************************************ * ">> $ тмпфиле
ецхо "" >> $ тмпфиле
Још чекова:
# Прикажи тренутне везе:
ецхо "нетстат сада показује:" >> $ тмпфиле
/ бин / нетстат -п >> $ тмпфиле
одјек "************************************************ * ">> $ тмпфиле
ецхо "" >> $ тмпфиле# Проверите простор на диску
ецхо "простор на диску:" >> $ тмпфиле
/ бин / дф -к >> $ тмпфиле
одјек "************************************************ * ">> $ тмпфиле
ецхо "" >> $ тмпфиле
Затим запишите садржај привремене датотеке у трајнију датотеку дневника и пошаљите резултате одговарајућим странама. Други маилинг је скраћени резултат који се једноставно састоји од стандарда из 'топ':
# Пошаљи резултате у датотеку дневника:
/ бин / цат $ тмпфиле >> $ логфиле# И пошаљите резултате на сисадмин:
/ уср / бин / мутт -с "$ мацхине има висок ниво оптерећења! - $ дт" -а $ мисклЛог -а $ мсгЛог $ маилстоп <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ логфиле
А онда нека кућна служба и излаз:
# А затим уклоните привремену датотеку:
рм $ тмпфиле
рм $ топфиле
фи#
екит 0
Надам се да ово помаже некоме тамо. Потпуно састављена скрипта је:
#! / бин / басх
#
# Скрипта за проверу просечних нивоа оптерећења система како би се утврдило који су процеси
# узимајући га претјерано високо ...
#
# сет енвиронмент
дт = "датум +% д% б% И-% Кс"
# Очигледно, промените следеће директоријуме где се заправо чувају ваши лог фајлови
тмпфиле = "/ тмп / цхецкСистемЛоад.тмп"
логфиле = "/ тмп / цхецкСистемЛоад.лог"
мсгЛог = "/ вар / лог / мессагес"
мисклЛог = "/ вар / лог / мисклд.лог"
# први маилстоп је стандардна е-пошта за извештаје. Други је за мобилни телефон (са смањеним извештајем)
маилстоп = "сисадмин@мидомаин.цом"
маилстоп1 = "15555555555@мицеллпхоне.цом"
мацхине = "хостнаме"
Следећа три су за митоп употребу - користите дб корисника који има пристојна права
дбуср = "корисничко име"
дбпв = "лозинка"
дб = "твојдатабасенаме"
# Следи ниво оптерећења за провјеру - 10 је стварно висок, тако да га можете смањити.
левелТоЦхецк = 10
# Постави променљиве из система:
лоадЛевел = "цат / проц / лоадавг | авк" принт $ 1
лоадЛевел = $ (принтф "% 0.ф" $ лоадЛевел)# ако је ниво оптерећења већи него што желите, покрените процес скрипте. Иначе, излаз 0
иф [$ лоадЛевел -гт $ левелТоЦхецк]; онда
ецхо ""> $ тмпфиле
ецхо "**************************************" >> $ тмпфиле
ецхо "Дате: $ дт" >> $ тмпфиле
ецхо "Цхецк Систем Лоад & Процессес" >> $ тмпфиле
ецхо "**************************************" >> $ тмпфиле# Добијте више променљивих из система:
хттпдПроцессес = "пс -деф | греп хттпд | греп -в греп | вц -л"# Прикажи тренутни ниво оптерећења:
ецхо "Лоад Левел Ис: $ лоадЛевел" >> $ тмпфиле
одјек "************************************************ * ">> $ тмпфиле# Прикажи број ХТТПд процеса који се тренутно извршавају (не укључујући децу):
ецхо "Број хттпд процеса сада: $ хттпдПроцессес" >> $ тмпфиле
одјек "************************************************ * ">> $ тмпфиле
ецхо "" >> $ тмпфиле# Прикажи листу процеса:
ецхо "Процеси су сада покренути:" >> $ тмпфиле
пс ф-фиф >> $ тмпфиле
одјек "************************************************ * ">> $ тмпфиле
ецхо "" >> $ тмпфиле# Прикажи тренутну МиСКЛ информацију:
ецхо "Резултати из митоп:" >> $ тмпфиле
/ уср / бин / митоп -у $ дбуср -п $ дбпв -б -д $ дб >> $ тмпфиле
одјек "************************************************ * ">> $ тмпфиле
ецхо "" >> $ тмпфиле# Прикажи тренутни врх:
ецхо "топ нов сховс:" >> $ тмпфиле
ецхо "топ нов сховс:" >> $ топфиле
/ уср / бин / топ -б -н1 >> $ тмпфиле
/ уср / бин / топ -б -н1 >> $ топфиле
одјек "************************************************ * ">> $ тмпфиле
ецхо "" >> $ тмпфиле# Прикажи тренутне везе:
ецхо "нетстат сада показује:" >> $ тмпфиле
/ бин / нетстат -п >> $ тмпфиле
одјек "************************************************ * ">> $ тмпфиле
ецхо "" >> $ тмпфиле# Проверите простор на диску
ецхо "простор на диску:" >> $ тмпфиле
/ бин / дф -к >> $ тмпфиле
одјек "************************************************ * ">> $ тмпфиле
ецхо "" >> $ тмпфиле# Пошаљи резултате у датотеку дневника:
/ бин / цат $ тмпфиле >> $ логфиле# И пошаљите резултате на сисадмин:
/ уср / бин / мутт -с "$ мацхине има висок ниво оптерећења! - $ дт" -а $ мисклЛог -а $ мсгЛог $ маилстоп <$tmpfile /usr/bin/mutt -s "$machine has a high load level! - $dt" $mailstop1 >$ логфиле# А затим уклоните привремену датотеку:
рм $ тмпфиле
рм $ топфиле
фи#
екит 0