
Привіт друзі! Мене давно мучило питання, яке є причиною безлічі холіварів – яка ОС краща? Об’єктивно – ОС для мене давно стала інструментом – і для кожної задачі свій інструмент підходить краще. І от я вирішив перевірити, чи дійсно тестування навантаження краще виконувати, запускаючи клієнт саме в Linux? Чи буде різниця в результатах? І якщо так, чи суттєва?
Не лякайтеся, далі буде багато інфи, але вона важлива, щоб зробити дослідження максимально об’єктивним. Отже, сьогодні ми будемо порівнювати один і той самий тест в JMeter на двох різних сервісах: статична веб сторінка, розгорнута в nginx та вже знайомий вам за попередніми статтями веб сервіс на Flask. Чому саме вони?
🧊 Статичний контент веб сервер повертає відповідь швидше і менше навантажується, тому є змога спостерігати максимальні можливості інструмента.
⚡️ Веб сервіси ж зазвичай тестуються частіше, відповідають повільніше і сильніше навантажують сервер.
Сам тест: 1 GET запит, статична затримка 1 сек, 1000 потоків, 30 сек розігріву, 3 хв тесту. Будемо порівнювати тест, запускаючи JMeter на одному комп’ютері в різних системах:
- Windows 10 2004
- Kubuntu 20.04
- WSL2 з Ubuntu 20.04 – віртуальний Linux, вбудований в Windows
Всі тести, для виключення похибки, я виконав по 3 рази, тобто всього 18 разів 🙀.
Щоб зекономити час та місце, в таблиці результатів буду вказувати лише середні значення. І в результатах тестів також будуть відсутні метрики серверу – оскільки вони не є метою дослідження. Достатньо інформації, що під час тестів сервер не був завантажений на 100%
OS | Median response, ms | Throughput, rps | Errors, % | |
Test static | Windows | 4.33 | 906 | 0 |
WSL2 | 4.33 | 905 | 0 | |
Kubuntu | 6 | 993 | 0 | |
Test WS | Windows | 17.66 | 724 | 12 |
WSL2 | 16.33 | 743 | 5.6 | |
Kubuntu | 20.33 | 881 | 2.8 |
Тепер давайте проаналізуємо отримані результати:
- Тест статики майже однаково добре пройшов у всіх трьох системах, але в Linux показава майже 10% приріст продуктивності. Це говорить нам про те, що HTTP клієнт JMeter працює в Linux швидше.
- Тест веб сервісу показав, що в Linux середня продуктивність на 20% більша, ніж в Windows
- При цьому середня кількість помилок на створення з’єднання (незважаючи на те, що в усіх системах кількість одночасних з’єднань було збільшено) в Linux в 4 рази менша, ніж в Windows
- Тести в WSL працюють майже так само, як і в Windows. Прогрес, оскільки в WSL 1 процес просто вмирав під час тесту. Але не показує значних переваг
Чи означають отримані результати, що однозначно всі тести продуктивності треба виконувати лише у Linux? Тут все залежить від ПЗ, що ви тестуєте. Я вважаю, системи, що під час smoke тесту демонструють низьку продуктивність (< 100 rps) можна тестувати і в Windows. Системи, що показують високу продуктивність, при інших рівних, краще тестувати з Linux машин. Плюс не треба забувати, що одна машина не може видавати навантаження необмежено – для тестів високопродуктивних систем, коли є потреба згенерувати десятки тисяч користувачів, треба тестувати розподілено (десь читав, що для JMeter це ~1000 користувачів на машину)
Як вам дослідження? Корисно? Буду вдячний за коментарі
Дуже корисно, дякую!
Є лише одне побажання до представлення результатів: Ви спочатку перелічили системи в послідовності Windows, Kubuntu, WSL2, а потім в таблиці результатів послідовність систем змінилась. Мене це відволікло від аналізу і сприймання результатів 🙂