Ако сте работили като системен администратор достатъчно дълго, сте виждали страховитите инциденти „Сървърът е бавен“. Дълго време този тип инциденти ме караха да ме боли. Как, по дяволите, отстранявате нещо толкова субективно? „Бавното“ на ежедневния потребител може просто да е причинено от други процеси (планирани или не), които се изпълняват и консумират повече ресурси от обикновено, или нещо наистина може да не е наред със сървъра.
Когато за първи път започнах работа като системен администратор, веднага отговарях с: „Имам нужда от повече информация за това.“ Е, обикновено потребителят не може да даде повече информация, защото не знае какво се случва зад кулисите или как да обясни това, което вижда, освен „просто е бавно“. Днес, преди дори да отговоря на потребителя, проверявам няколко неща.
Има много неща, които можете да разберете, като влезете в хоста. Можете ли да влезете изобщо? Влизането бавно ли е или виси? Командата ssh има три нива на отстраняване на грешки, всяко от които ви дава изобилие от информация, преди дори да сте в системата. За да активирате отстраняването на грешки, просто добавете допълнително v към опцията -v. Например отстраняване на грешки от ниво три, което използвам изключително, би било:
[~]$ ssh -vvv hostname.domain.comСега нека да разгледаме трите най-големи причини за сървъра забавяне: CPU, RAM и диск I/O. Използването на процесора може да причини общо забавяне на хоста и затруднения при навременното изпълнение на задачите. Някои инструменти, които използвам, когато разглеждам процесора, са топ andsar.
Помощната програма top ви дава поглед в реално време какво се случва със сървъра. По подразбиране, когато top стартира, той показва активност за всички процесори:
Този изглед може да се промени чрез натискане на цифровия клавиш 1, което добавя повече подробности относно стойностите на използване за всеки процесор:
Някои неща, които трябва да търсите в този изглед, са средното натоварване (показано от дясната страна на горния ред) и стойността на следното за всеки процесор:
us: Този процент представлява количеството CPU, изразходвано от потребителските процеси.sy: Този процент представлява количеството CPU, консумирано от системните процеси.id: Този процент представлява колко неактивен е всеки процесор.Всяка от тези три стойности може да ви даде доста добра представа в реално време за това дали процесорите са обвързани с потребителски процеси или системни процеси.
За да се обясни наистина средното натоварване, ще е необходима отделна статия. За целите на тази статия ще говоря в общи линии. Трите средни стойности на натоварване отляво надясно представляват средни стойности за една минута, пет минути и 15 минути. Отново, казано много общо, ако видите, че средната стойност за една минута надвишава броя на физическите процесори, които имате, тогава системата най-вероятно е обвързана с процесора.
Забележка: За повече информация относно средното натоварване и защо някои хора го смятат за глупаво число, вижте задълбочените изследвания на Брендън Грег.
За исторически данни за производителността на процесора разчитам на командата sar, която се предоставя от пакета sysstat. На повечето сървърни версии на Linux sysstat е инсталиран по подразбиране, но ако не е, можете да го добавите с мениджъра на пакети на вашата дистрибуция. Помощната програма sar събира системни данни на всеки 10 минути чрез задание на cron, намиращо се в /etc/cron.d/sysstat (CentOS 7.6). Ето как да проверите всички „Големи 3“ с помощта на sar.
Забележка: Ако току-що сте инсталирали sar, за да следвате тази статия, дайте на командата известно време първо да запише данни.
Командата sar -u ви дава информация за всички процесори в системата, започвайки от полунощ:
Както при top, основните неща, които трябва да проверите тук, са %user, %system, %iowait и %idle. Тази информация може да ви каже колко отдавна сървърът е имал проблеми.
Като цяло командата sar може да предостави много информация. Тъй като тази статия обяснява само бърза проверка на това, което се случва на сървъра, вижте man sar, за да разбиете тази информация още повече.
За да проверя производителността на RAM, използвам sar -r, който ви дава използваната памет за този ден:
Основното нещо, което трябва да търсите при използването на RAM, е %memused и %commit. Кратка дума за полето %commit: Това поле може да показва над 100%, тъй като ядрото на Linux рутинно прекалява с RAM. Ако %commit е постоянно над 100%, този резултат може да е индикатор, че системата се нуждае от повече RAM.
За производителност на I/O на диска използвам sar -d, който ви дава изхода на I/O на диска, използвайки само името на устройството. За да получите името на устройствата, използвайте sar -dP:
За този резултат разглеждането на %util и %await ще ви даде добра цялостна картина на I/O диска в системата. Полето %util е доста очевидно: това е използването на това устройство. Полето за изчакване съдържа времето, което I/O прекарва в планировчика. Изчакването се измерва в милисекунди и в моята среда съм виждал, че всичко, по-голямо от 50 ms, започва да създава проблеми. Този праг може да варира във вашата среда.
Ако някоя от тези команди покаже проблем, можете да се върнете, за да видите кога са започнали проблемите със сървъра, като използвате sar {-u, -r, -d, -dP} -f /var/log/sa/sa ( където XX е денят от месеца, който искате да търсите).
В този момент обикновено имам добра представа какво се случва в момента на сървъра и какво се е случило през последните 48 часа. Ще отговоря на потребителя с по-информирани отговори. Например: „Не виждам никаква индикация за забавяне на хоста през последните 24 часа. Моля, опитайте да използвате нов putty профил за ssh и ме уведомете, ако продължавате да имате проблеми.“
Друг пример: „Не виждам нищо, което в момента да причинява проблеми на този хост, но забелязах известно по-високо натоварване на процесора $time. Тогава ли видяхте проблеми? Ако е така, моля, опитайте сега и ме уведомете, ако продължите за да видите проблемите."
Схванахте идеята. Наличието на информацията, предоставена чрез преглед на първоначалното влизане и след това изпълнение на няколко sar команди, които обикновено ми отнемат по-малко от 10 минути, за да изпълня, прави много за предотвратяване на повече въпроси и постигане на решение по-бързо.
PREV: sys.servers (Transact-SQL) - SQL Server | Microsoft Docs
NEXT: Стръмно ръководство за начинаещи: Съвети и трикове за завладяване на...