13 Профілювання програмного забезпечення для усунення проблеми з продуктивністю програми

Мета вашої програми — добре обслуговувати кінцевих користувачів.

Він має бути швидким, чуйним, простим у використанні та надійним, серед інших бажаних функцій.

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

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

І якщо ви не вирішите ці проблеми, загальна продуктивність програми погіршиться.

Як наслідок, ваші клієнти можуть роздратуватися або взагалі припинити використовувати вашу програму через низьку продуктивність і повільну швидкість. Це не тільки погіршує вашу репутацію, але й втрачає ваші доходи та прибутки. Тому ваш код потрібно проаналізувати, переглянути та налагодити, щоб досягти оптимальної продуктивності. І найшвидший спосіб зробити це — використовувати інструмент профілювання програмного забезпечення для моніторингу та налагодження ваших кодів та усунення вузьких місць, пов’язаних із продуктивністю.

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

Що таке профілювання програмного забезпечення?

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

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

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

Чому профілювання програмного забезпечення має значення?

Профілювання програмного забезпечення необхідно для визначення використання ресурсів і часу виконання, пов’язаного з певною функцією. Це допомагає оптимізувати швидкість роботи програми та, водночас, забезпечити мінімальне споживання ресурсів.

Крім того, це робиться для відстеження та оптимізації використання ЦП і часу виконання команд.

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

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

py-spy

py-spy є чудовим профайлером вибірки для Python. Це дає змогу коротко заглянути в усі речі, на які витрачає час ваша програма на основі Python.

Для цього вам не потрібно змінювати свої коди або повністю перезапускати програму. py-spy передбачає низькі накладні витрати та розроблено в Rust для більшої швидкості. Він не створений для роботи в тому самому процесі, що й ваша профільована програма на основі Python. Це означає, що py-spy дуже безпечний і надійний у використанні проти робочих кодів на основі Python.

Інструмент дозволяє записувати профілі, генерувати графіки полум’я для створення інтерактивних файлів SVG. Ви також можете переглядати інші параметри, наприклад змінювати частоту дискретизації, рідні розширення C для профілювання, підпроцеси, ідентифікатори потоків тощо. Ви можете отримати перегляд функцій, що відбуваються у ваших програмах, за допомогою команди «top» і відобразити поточний стек викликів за допомогою команди «dump» для кожного потоку python.

Він підтримує всі версії інтерпретатора CPython, такі як 2.3 – 2.7 і 3.3 – 3.8. Ви можете встановити py-spy з PyPI або GitHub.

піроскоп

Програмне забезпечення безперервного профілювання з відкритим кодом піроскоп допомагає усунути всі проблеми з продуктивністю у вашій програмі за лічені хвилини.

Ви можете запустити сервер, а потім агента, незалежно від того, що ви використовуєте, Docker, Linux або шукаєте документи Ruby або Go, Pyroscope охопить вас. Навіть якщо ви націлюєтеся на десять секунд або десять місяців даних профілювання програмного забезпечення, їхній спеціально розроблений механізм зберігання виконує швидкі запити.

  Створюйте альбоми з програми «Камера» та зберігайте в ній фотографії [Jailbreak]

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

Він працює в macOS, Linux і Docker і підтримує програми, написані на Python, Go і Ruby.

Bubbleprof

Bubbleprof by Clinic.js надає новий і унікальний спосіб профілювання вашого програмного забезпечення, написаного на Node.js. Він використовує «бульбашковий» інтерфейс користувача, який допомагає всім, від експертів до початківців, визначати асинхронний час, проведений у вашій програмі.

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

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

Щоб обчислити затримки, коли операція переходить від однієї групи до іншої, Bubbleprof вимірює довжину стрілки, яка з’єднує бульбашки. На додаток до цього, він також використовує різні кольори в процесах вимірювання. Одночасно внутрішні кольорові лінії представляють суміш типів асинхронних операцій як причину затримки.

Піінструмент

Оптимізуйте свої коди Python за допомогою Піінструмент.

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

Щоб використовувати Pyinstrument, вам не потрібно писати сценарій Python; просто викликайте Pyinstrument безпосередньо за допомогою командного рядка. Ваш сценарій працюватиме нормально, а інструмент видаватиме кольоровий підсумок областей, де програма проводила свій час. Він також поставляється з Python API, що робить процес ще простішим.

У вас також є можливість профілювати веб-запити у Flask і Django, для яких у них є докладна документація. Зверніть увагу, що Pyinstrument пропонує статистичне профілювання, яке записує стек викликів кожну 1 мс замість відстеження кожного виклику функції, здійсненого вашою програмою.

Це вигідно, оскільки статистичні профайлери мають менші накладні витрати порівняно з профайлерами трасування. Оскільки він записує весь стек, відстеження дорогих викликів функцій стає легким. На додаток до цього, Pyinstrument також приховує (за замовчуванням) кадри бібліотеки, дозволяючи вам зосередитися на програмах або модулях, відповідальних за вплив на продуктивність.

Усунення проблем із продуктивністю стає легшим, оскільки Pyinstrument записує час, витрачений за допомогою «настінного годинника». Інструмент відстежує весь час програми для читання файлів, завантаження даних, зв’язку з базою даних тощо.

Xdebug

Щоб покращити продуктивність вашого коду та зробити процес розробки трохи цікавішим, Xdebug поставляється з широкими можливостями для профілювання та налагодження.

Насправді це розширення PHP, яке дозволяє вам знаходити вузькі місця у вашій програмі PHP і аналізувати її продуктивність за допомогою зовнішніх інструментів візуалізації для створення графіків продуктивності.

Xdebug створює докладний вихід, що показує шлях програми до досягнення помилки, включаючи параметри, які вона передала певній функції. Це робиться для відстеження помилок. Щоб допомогти розробнику чітко зрозуміти речі, він генерує кольорову інформацію разом із структурованими представленнями.

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

SPX

Просте розширення профілювання (SPX) — це розширення профілювання, розроблене для PHP. Воно має деякі унікальні властивості, що відрізняє його від інших розширень профілювання. Використовувати його можна БЕЗКОШТОВНО та обмежено лише вашою інфраструктурою, що означає відсутність ризику витоку даних.

Простота SPX робить його дуже легким у використанні: все, що вам потрібно, це встановити командний рядок або змінну середовища для профілювання сценарію. Або ви також можете ввімкнути перемикач на веб-сторінці для профілювання сценарію. Як наслідок, вам не потрібно інструментувати свій код вручну.

Він також підтримує запущений сценарій командного рядка – Ctrl-C. На додаток до цього, цей процес також усуває необхідність використання засобу запуску командного рядка або спеціального розширення браузера. SPX підтримує кілька метрик близько 22, включаючи різні метрики часу та пам’яті, об’єкти, файли, що використовуються, введення/виведення тощо.

  Як завантажити всі фотографії з розмови в Месенджері

Він може збирати дані, не виходячи з контексту. Його веб-інтерфейс користувача дозволяє налаштовувати/увімкнути профілювання для сеансу браузера, який зараз використовується, і містить список усіх деталей і звітів профільованого сценарію. Веб-інтерфейс дозволяє вибрати окремий звіт для глибшого аналізу та містить деякі інтерактивні візуалізації, такі як Flamegraph, плоский профіль і часову шкалу, які можна масштабувати для викликів функцій у мільйони.

Префікс

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

Чудові можливості відстеження та профілювання Prefix дозволяють швидко знаходити приховані винятки, повільні запити SQL тощо. Він надає вашим розробникам справжню потужність APM (моніторинг продуктивності програми). Для цього Prefix перевіряє продуктивність коду так, як він написаний, і дозволяє тестувати коди з кращою продуктивністю.

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

Ви також можете відстежувати кожен параметр виклику SQL, завантажувати таймінги та переглядати відповідні записи. Префікс також спрощує виявлення шаблонів N+1. Забудьте про сортування всіх цих брудних журналів; об’єднайте їх, щоб легко знайти проблеми.

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

Prefix працює на Windows і Mac і підтримує .Net, Ruby, Java, PHP, Python і Node.js.

Скален

Скален це високоточний, високопродуктивний графічний процесор, процесор і профайлер пам’яті для програм на основі Python. Він пропонує кілька переваг перед іншими профайлерами, наприклад, швидші порядки величин і надання більш глибокої інформації.

Scalene неймовірно швидкий і використовує вибірку, а не інструменти. Він навіть не покладається на засоби трасування Python. Крім того, його накладні витрати зазвичай не перевищують 10-20%. Цей інструмент виконує профілювання програмного забезпечення на рівні рядків і вказує на ті рядки коду, які відповідають за час виконання вашої програми.

Ці деталі є більш цінними, ніж ті, що на рівні функцій. Scalene відокремлює час, витрачений виключно на Python, від часу використання рідного коду, який включає бібліотеки. Оскільки більшість програмістів на Python не оптимізують продуктивність рідного коду, розробники можуть зосередити свої зусилля на оптимізації кодів, які ви можете покращити.

Він підсвічує гарячі точки червоним кольором, що полегшує вам визначення розподілу часу ЦП/пам’яті та легко відокремлює системний час для пошуку проблем із введенням/виведенням. Scalene може повідомляти час GPU, профілі використання пам’яті та відстежувати використання CPU. Scalene також може визначати можливі витоки пам’яті, обсяг копіювання профілів і генерувати зменшені профілі для рядків коду, які споживають більше 1% ЦП.

VisualVM

Універсальний інструмент усунення несправностей для Java, VisualVM, призначений для використання як на етапі виробництва, так і на етапі розробки. Це візуальне програмне забезпечення, яке об’єднує легкі функції профілювання та інструменти командного рядка JDK.

VisualVM відстежує програми, які працюють на Java 1.4+, і усуває їх неполадки за допомогою кількох технологій, таких як JMX, jvmstat, Attach API та Serviceability Agent. Цей інструмент ідеально підходить для різних вимог інженерів з якості, системних адміністраторів і кінцевих користувачів.

Він автоматично виявляє віддалено та локально запущені програми на основі Java та перераховує їх. Інструмент також дозволяє визначати програми вручну за допомогою підключення JMX. Для кожного процесу він показує типові дані часу виконання, такі як PID, передані аргументи, домашню сторінку JDK, основний клас, прапорці JVM, версію JVM, а також властивості системи та аргументів.

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

Інструменти та профайлери вибірки можна виконувати за допомогою VisualVM для керування пам’яттю та продуктивності програми. Він відображає дампи потоків, щоб забезпечити швидке розуміння процесів. Він також переглядає та створює знімки .hprof на вимогу, щоб допомогти вам виявити неефективне використання купи та усунути витоки пам’яті.

  15 найкращих криптовалютних ботів для автоматизованої торгівлі

Крім того, VisualVM може читати основні дані про збійний процес на основі Java разом із його середовищем. Ви можете аналізувати свої програми в автономному режимі; він може зберігати середовище виконання програми та конфігурацію за допомогою зроблених дампів купи, дампів потоків і знімків профілювання, які ви можете обробити в автономному режимі на пізнішому етапі.

Він працює на Windows, Linux і Unix.

Orbit Profiler

Візуалізуйте свою програму C/C++ і швидко знайдіть проблеми з її продуктивністю Orbit Profiler. Це інструмент налагодження та окремий профайлер, який допомагає розробникам переглядати та розуміти процес виконання складної програми.

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

Orbit Profiler може ефективно працювати з будь-якою програмою C або C++ за умови доступу до файлу PDB. Потім він почне профілювання, коли ви завершите завантаження його програми. Інструмент переходить до цільового процесу, підключається до вибраних функцій і виконує профілювання.

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

Він працює на Windows і Linux.

Uber JVM Profiler

З розширеними можливостями профілювання, Uber JVM Profiler є ще одним хорошим варіантом для ваших програм на основі Java.

Він пропонує Java Agent, який розподілено збирає кілька трасувань стека та метрик для процесів JVM Spark/Hadoop, наприклад, метрики пам’яті/ЦП/IO.

Інструмент може відстежувати аргументи та методи Java у кодах користувачів, не змінюючи їх. Ви також можете використовувати його, щоб відстежувати затримку виклику вузлів імен HDFS для кожної програми Spark і знаходити проблеми. Він навіть може відстежувати шляхи до файлів HDFS програми Spark, щоб знайти гарячі файли та виконати подальшу оптимізацію.

Uber JVM Profiler спочатку було створено для профілювання програм Spark, які зазвичай включають багато машин або процесів для однієї програми. Таким чином, люди можуть легко співвідносити показники для цих машин або процесів.

Однак інструмент працює як типовий агент Java, і ви можете використовувати його для будь-якого процесу JVM. Його особливості включають:

  • Налагодження використання пам’яті виконавцями програми Spark, як-от пам’ять купи Java, власна пам’ять, пам’ять без купи, пул буферів і пул пам’яті
  • Налагодження використання ЦП і час збору сміття
  • Налагодження методів класу Java щодо їх частоти та часу або профілювання тривалості
  • Профілювання аргументів (налагодження та трасування виклику методу класу Java та значення його аргументу)
  • Профілювання Stacktrack і генерація Flamegraphs для процесорного часу
  • Налагодження метрик введення-виведення та метрик потоку JVM

Трейсі

Трейсі це корисний інструмент, який допомагає розробникам легко налагоджувати програми PHP. Він має зручний дизайн і розширені функції, такі як підтримка CLI, налагодження викликів AJAX тощо.

Він може швидко знаходити та виправляти помилки, робити дамп змінних, реєструвати помилки, візуалізувати використання пам’яті та визначати час виконання запитів або сценаріїв. Використання кольорового кодування та виділення проблем червоним кольором із чіткими поясненнями допомагає вам легко візуалізувати винятки та помилки та зрозуміти їх.

Tracy оснащено функцією журналювання та автоматичним визначенням середовища. Він зберігає дані у файлах журналу та відображає повідомлення про помилки сервера для відвідувачів під час простоїв. Tracy також може інтегруватися з Drupal 7, OpenCart, WordPress тощо.

впроф

впроф це візуальний профайлер для програм Python. Він надає різноманітні інтерактивні візуалізації для різних характеристик вашої програми Python, наприклад використання пам’яті та часу виконання.

Він доступний за ліцензією BSD і підтримує Python 3.4 і вище.

Висновок

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

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

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

Ім’я
Мови
py-spy
Python
піроскоп
Python, Ruby, Go
Bubbleprof
Node.js
Піінструмент
Python
Xdebug
PHP
SPX
PHP
Префікс
Python, .NET, Java, Node.js, Ruby, PHP
Скален
Python
VisualVM
Java
Orbit Profiler
C, C++
Uber JVM Profiler
Java
Трейсі
PHP
впроф
Python