Часто установка нашого на місці, стійкого до debian програми, працює у віртуальній машині - як правило, у VMware ESXi. У загальному випадку ми не маємо видимості або впливу на їхнє середовище віртуалізації і не маємо доступу до, наприклад, клієнта VMware vCenter або його еквівалента. Я зосереджуюсь на VMware тут, тому що це на сьогоднішній день є найпоширенішим, що ми бачимо.
Ми хотіли б:
- Повідомте адміністратора VMware клієнта: Ви можете запускати наше додаток, наприклад, у середовищі VMware ESX, якщо воно відповідає критеріям продуктивності X, Y та Z.
- Бути в змозі визначити, чи насправді критерії X, Y і Z постійно виконуються (наприклад, прямо зараз ), навіть у запущеній системі (ми не можемо зупинити наш додаток і запустити орієнтири, а початковий орієнтир не буде достатнім, оскільки продуктивність у віртуальні середовища змінюються з часом).
- Будьте впевнені, що якщо будуть виконані критерії X, Y і Z, ми матимемо адекватні віртуальні ресурси HW, щоб запустити нашу програму із задовільною продуктивністю.
Тепер що таке X, Y і Z?
Ми неодноразово бачили, що, коли виникають проблеми з продуктивністю, проблема не в нашому застосуванні, а в середовищі віртуалізації. Наприклад, інша віртуальна машина використовує багато процесора, пам'яті або SAN, на яких фактично зберігаються диски, отримує велике використання чимось, крім нашого додатку. Наразі у нас немає способу довести чи спростувати це.
Теоретично також можливо, що іноді наше застосування повільне ... ;-)
Як можна визначити першопричину наших проблем із продуктивністю: віртуальне середовище чи наш додаток?
Зазвичай існують 3 зони для проблем з продуктивністю CPU, Memory та DISK I / O.
ЦП
Наприклад, VMware адміністратор може вказати резервування та ліміт, виражені в МГц, але, наприклад, 512 МГц на одному хості ESX точно такий же, як 512 МГц на іншому хості ESX, можливо, у зовсім іншому кластері ESX?
І як можна виміряти, чи дійсно ми це отримуємо? Поки наша програма працює, ми можемо побачити, що ми на 212% використовуємо процесор на 4 процесорах. Це тому, що наш додаток робить багато чи тому, що інший VM на тому ж хості виконує інтенсивне завдання процесора та використовує весь процесор?
Пам'ять (Повітряна куля?)
Якщо ми запитуємо, наприклад, 16 Гб оперативної пам’яті, що часто налаштовується, але через повітряну кулю ми фактично отримуємо лише 4 ГБ, і це дивно, наша програма працює погано.
Можна запитати інструменти VMware про поточну повітряну кулю, але ми виявили, що вона часто лежить (або принаймні неточна). Ми бачили приклади, коли ОС вважає, що є 16 ГБ оперативної пам’яті, сума пам’яті постійної пам’яті (RSS) усіх процесів становить 4 Гб оперативної пам’яті, але є лише 2 ГБ оперативної пам’яті, навіть коли інструменти VMware говорять нам, що є 0 балотування: - (
Крім того, просто додавання RSS разом не є дійсним, тому що тут можна легко поділити оперативну пам’ять, наприклад, пам'ять під час копіювання, тому 512 МБ + 512 МБ не обов'язково означає 1 ГБ, але може означати щось менше. Таким чином, не можна просто відняти RSS від усіх процесів, щоб визначити, наскільки оперативна пам'ять повинна бути вільною і тим самим надійно виявити повітряну кулю. Можна виявити деякі випадки повітряної кулі, але є й інші випадки, коли повітряна куля діє, але не виявляється цим методом.
Дисковий ввід / вивід
Я думаю, ми могли б з часом графікувати кількість читання та запису диска, кількість прочитаних та записаних байтів, а також IO очікування%. Але це дасть нам точну картину дискового вводу / виводу? Я гадаю, що якщо в іншому віртуальному комп'ютері працює весь майнер біткойн, який використовує весь процесор, наш IO-час очікування збільшиться, навіть якщо базовий SAN дає точно таку ж ефективність, просто тому, що наші ресурси процесора знижуються, а значить, IO чекають ( який вимірюється у% ) йде вгору.
Отже, підсумовуючи, якою мовою ми можемо скористатись для опису, наприклад, адміністратора VMware, яка продуктивність нам потрібна у портативному та вимірюваному вигляді?
"It runs fine with x, y, and z"
недостатньо точне. Ви повинні мати можливість точно сказати своїм клієнтам, що вимагає ваша заявка. Якщо вони дадуть вам ці ресурси, і програма працює погано, питання не в цьому "What do we need from a resource perspective?"
, але"Why is it performing poorly even though the proper resources have been allocated?"