Перейти до вмісту
EuroVPSEuroVPS

Змініть одне, виміряйте знову: як знайти справжнє вузьке місце

Повторюваний метод для повільних серверів: визначте симптом, перевірте кожен ресурс на використання, насичення й помилки, змініть одне, виміряйте знову.

Автор EuroVPS Engineering

5 хв читання
Змініть одне, виміряйте знову: як знайти справжнє вузьке місце

Коли платформа повільна, найшвидше замовлення є замовленням на більше всього. Воно часто трохи допомагає, дорого коштує і залишає справжню причину на місці, щоб та вкусила знову на наступному піку трафіку. Альтернатива менш захоплива і набагато ефективніша: знайти той один ресурс, на який чекає навантаження, змінити в ньому одне і виміряти знову. Ось метод та інструменти.

Почніть з числа, а не з відчуття

«Сайт повільний» перевірити не можна. «Checkout займає чотири секунди на вечірньому піку і менше однієї вночі» можна. Перш ніж чогось торкатися, прив’яжіть симптом до вимірювання, яке можна повторити: час сторінки ззовні, тривалість запиту, час виконання пакетного завдання, частота запитів, за якої починаються помилки. Це число є тим, за чим ви зрозумієте, чи допомогло хоч щось із того, що ви змінили. Без нього кожна зміна відчувається як прогрес.

Потім запишіть шлях, який проходить повільна операція: клієнт, мережа, балансувальник, web-сервер, застосунок, кеш, база даних, сховище. Вузьке місце десь на цьому шляху, і шлях каже вам, куди дивитися.

Перевіряйте кожен ресурс на використання, насичення й помилки

Проста дисципліна, яку популяризував Brendan Gregg як метод USE, тримає пошук чесним. Для кожного ресурсу на шляху, CPU, пам’ять, мережа, сховище, ставте три питання: наскільки він зайнятий, чи стоїть робота в черзі до нього, і чи повідомляє він про помилки? Ресурс може бути мало завантаженим і все одно бути проблемою, якщо запити стоять у черзі перед ним, тож друге питання важить найбільше.

CPU.

mpstat -P ALL 1
vmstat 1
pidstat -u 1

Дивіться на використання по ядрах, а не лише на середнє. Одне ядро під повним навантаженням, коли решта простоюють, вказує на однопотокове вузьке місце, яке більша кількість ядер не виправить. У vmstat run queue (r), яка стабільно більша за кількість ядер, є насиченням.

Пам’ять.

free -h
vmstat 1
cat /proc/pressure/memory

Тиск на пам’ять проявляється як активність reclaim і час простою у файлі pressure. На правильно побудованій віртуальній машині немає swap, у якому можна сховатися, тож навантаження, якому справді потрібно більше пам’яті, ніж воно має, падає гучно, і це чесний результат: виправлення є або більше пам’яті, або ощадливіший застосунок.

Сховище.

iostat -x 1
pidstat -d 1

Стовпці, які мають значення, це середній час очікування читання і запису та розмір черги. %util вводить в оману на flash і томах SAN, які обслуговують багато запитів паралельно і можуть показувати високе використання, маючи ще багато запасу. Зростання часу очікування разом із зростанням черги є справжнім сигналом.

Мережа.

sar -n DEV 1
sar -n EDEV 1
ss -s
cat /proc/net/bonding/bond0
ethtool -S <interface> | grep -iE 'drop|err|discard'

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

База даних. Багато повільних платформ є базою даних, яка читає з диска те, що мала б читати з пам’яті. На MySQL або MariaDB порівняйте логічні читання з читаннями, які мусили піти в сховище:

SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%';

Якщо Innodb_buffer_pool_reads (читання, що промахнулися повз пам’ять) зростає швидко відносно Innodb_buffer_pool_read_requests, робочий набір не вміщується в buffer pool. Slow query log з розумним порогом каже вам, які запити за це платять.

Змініть одне

Щойно один ресурс виділяється, сформулюйте гіпотезу, яка пояснює початкове число, і зробіть одну зміну, яка її перевіряє: buffer pool, розрахований під робочий набір, політику hash для bond, кеш перед дорогою сторінкою, запит з індексом, якого йому бракує, VM, зменшену так, щоб уміститися в один сокет CPU. По одній зміні за раз, бо якщо ви зміните три речі й число покращиться, ви не знатимете, яка саме допомогла, і, можливо, залишите дві, які все погіршили.

Виміряйте знову, тим самим способом

Повторіть вимірювання з початку, за тих самих умов: та сама пора доби або те саме синтетичне навантаження, той самий тест, ті самі інструменти. Зміна, яка не допомогла, усе одно є результатом, бо вона щось виключає; відкотіть її і поверніться до ресурсів.

Повторюйте, доки початковий симптом не зникне або наступне вузьке місце не стане тим, що справді має вирішувати гроші. Саме тоді купівля обладнання є правильною відповіддю, і ви точно знатимете, який ресурс купувати.

Як це виглядає на практиці

Деякі з найефективніших налаштувань мають довжину в один рядок. Ми розраховуємо буфери пам’яті баз даних так, щоб гарячі дані жили в RAM, а flash обслуговував справжню роботу, і кожен сервер з bond, який ми будуємо, хешує за адресами і портами, щоб обидві лінії несли трафік. Обидва є постійними правилами на кожній платформі, якою ми керуємо.

Як ми це робимо

Робота над продуктивністю є тим, як ми експлуатуємо кожну платформу, якою керуємо, а не окремим продуктом. Ми вимірюємо на кожному рівні, від I/O по томах на масивах і лічильників по портах на bond і комутаторах до slow logs на базах даних і зовнішнього вимірювання часу через CDN, перш ніж назвати причину. Постійні правила, які надійно правильні, такі як bond, що використовує обидві лінії, flash, до якого ставляться як до flash, і VM, що вміщуються в один сокет, застосовуються до кожної збірки. Коли платформі справді потрібно більше ємності, ми кажемо вам, який ресурс, скільки й чому.

Якщо ваша платформа повільна, а єдина пропозиція досі була «більший сервер», дайте нам спершу її виміряти.

Поговоріть з інженером

Related

Пов’язане: Інженерія продуктивності та ємності · Bare metal сервери на HPE і Dell · Enterprise SAN сховище на HPE 3PAR, all-flash

Опубліковано 11 серпня 2026 р..

Усі нотатки з практики