13 Профилиране на софтуер за отстраняване на грешки в производителността на приложението

Целта на вашето приложение е да обслужва добре вашите крайни потребители.

Той трябва да бъде бърз, отзивчив, лесен за използване и надежден, наред с други желани функционалности.

Но поддържането на вашия софтуер по начин, който продължава да осигурява производителност от най-високо ниво, не е толкова лесно.

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

И ако не коригирате тези проблеми, цялостната производителност на приложението се влошава.

В резултат на това вашите клиенти може да се раздразнят или да спрат да използват приложението ви изцяло поради лоша производителност и ниска скорост. Това не само влошава репутацията ви, но и ви струва по отношение на приходите и печалбите. Следователно вашият код трябва да бъде анализиран, прегледан и отстранен за постигане на оптимална производителност. А бързият начин да го направите е като използвате софтуерен инструмент за профилиране, за да наблюдавате и отстранявате грешки в кодовете си и да елиминирате тесните места, свързани с производителността.

В тази статия ще научите за софтуерното профилиране и как то може да ви помогне. И след това ще ви преведа през някои от най-добрите инструменти за профилиране, за да отстраните грешки в приложението си и да оптимизирате неговата производителност.

Какво е софтуерно профилиране?

Софтуерното профилиране е динамичен анализ на кода, при който поведението на програмата се изследва с помощта на данните, събрани по време на изпълнение на програмата. Той има за цел да определи различни програмни секции, които трябва да оптимизирате, за да увеличите скоростта на приложението, отзивчивостта и да намалите потреблението на памет и ресурси.

Софтуерът за профилиране обикновено измерва продължителността и честотата на извикванията на функции заедно с паметта или времевата сложност, свързана с дадена програма. Налични са и специфични програми за профилиране, като програми за профилиране на паметта.

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

Защо софтуерното профилиране има значение?

Софтуерното профилиране е необходимо за определяне на използването на ресурсите и времето за изпълнение, свързано с конкретна функция. Помага за оптимизиране на скоростта на програмата и в същото време гарантира, че тя консумира минимални ресурси.

Освен това се прави за проследяване и оптимизиране на използването на процесора и времето за изпълнение на команди.

Следователно изборът на правилния софтуерен инструмент за профилиране е необходим, за да сте сигурни, че можете да отстранявате грешки, свързани с производителността, по-бързо, за да подобрите неговата ефективност и да осигурите по-добро изживяване на крайния потребител. Много програмисти за профилиране също идват с подробни отчети и интерактивни графики и визуализации, които ви помагат да намерите точната първопричина за проблемите, което улеснява разрешаването им.

И така, ето списък с някои от най-добрите програми за профилиране на софтуер, които можете да опитате, и ни кажете кое работи най-добре за вас.

py-шпионин

py-шпионин е отличен инструмент за профилиране на проби за 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 ви покрива. Дори ако се стремите към десет секунди или десет месеца данни за профилиране на софтуера, тяхната специално проектирана машина за съхранение прави бързи заявки.

  Как да копаете DVD за 5 минути с WinX DVD Ripper

Не е нужно да се притеснявате за режийните разходи или производителността на приложението, тъй като те използват технология за профилиране на проби, която не влияе на производителността. Pyroscope съхранява вашите данни за профилиране ефективно; следователно, това е рентабилно за вас, дори ако искате да съхранявате различни данни за профилиране от различни приложения в продължение на години.

Работи на macOS, Linux и Docker и поддържа програми, написани на Python, Go и Ruby.

Bubbleprof

Bubbleprof от Clinic.js предоставя нов и уникален начин за профилиране на вашия софтуер, написан на Node.js. Той използва потребителски интерфейс „балон“, който помага на всеки, от експерти до начинаещи, да определи асинхронното време, прекарано във вашето приложение.

Той визуализира как работят вашите Node.js процеси, като наблюдава неговите асинхронизирани операции, групира ги, изчислява закъсненията и ги картографира.

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

За да изчисли закъсненията, докато операцията преминава от една група към друга, Bubbleprof измерва дължината на стрелката, която свързва мехурчетата. В допълнение към това, той използва различни цветове и в процесите на измерване. Едновременно с това вътрешните цветни линии представляват смес от типове асинхронни операции като причина за забавянето.

Pyinstrument

Оптимизирайте своите Python кодове с Pyinstrument.

Той ви показва защо вашият Python код е бавен и ви помага да диагностицирате проблемите, така че да имате тази светкавично бърза производителност.

За да използвате Pyinstrument, не е нужно да пишете скрипт на Python; просто извикайте Pyinstrument, като използвате директно командния ред. Вашият скрипт ще работи нормално и инструментът ще даде цветно резюме на областите, в които приложението е прекарало времето си. Освен това идва с Python API, което прави процеса още по-лесен.

Имате възможност да профилирате уеб заявки и във Flask и Django, за които те поддържат подробна документация. Тук, моля, имайте предвид, че Pyinstrument предлага статистическо профилиране, което записва стека на повикванията на всяка 1 ms, вместо да проследява всяко извикване на функция, направено от вашата програма.

Това е предимство, тъй като статистическите профилиращи програми включват по-ниски разходи в сравнение с проследяващите профилиращи програми. Тъй като записва целия стек, проследяването на скъпи извиквания на функции става лесно. В допълнение към това, Pyinstrument също скрива (по подразбиране) библиотечни рамки, което ви позволява да се съсредоточите върху приложения или модули, отговорни за въздействието върху производителността.

Отстраняването на грешки при проблеми с производителността е улеснено, тъй като Pyinstrument записва времето, прекарано с помощта на времето на „стенния часовник“. Инструментът проследява цялото време на програмата за четене на файлове, изтегляне на данни, комуникация с база данни и т.н.

Xdebug

За да подобрите проблемите с производителността на вашия код и да направите вашето изживяване при разработка малко по-забавно, Xdebug идва с широкообхватни възможности за профилиране и отстраняване на грешки.

Това всъщност е PHP разширение, което ви позволява да намерите тесните места във вашето PHP приложение и да анализирате неговата производителност, като използвате външни инструменти за визуализация, за да генерирате графики на производителността.

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

Предлага се и с отдалечен дебъгер, който можете да използвате, за да свържете Xdebug с работещ код, IDE или браузър, за да видите точките на прекъсване на кода и да изпълните кодовете ред по ред. Друга функция, която предлага, е покритието на кода, което показва колко код на вашата програма е бил изпълнен, и също така ви помага с модулни тестове.

SPX

Разширение за просто профилиране (SPX) е разширение за профилиране, предназначено за PHP. Той има някои уникални свойства, които го отличават от другите разширения за профилиране. Използването е напълно БЕЗПЛАТНО и е ограничено само до вашата инфраструктура, което означава, че няма риск от изтичане на данни.

Опростеността на SPX го прави много лесен за използване: всичко, от което се нуждаете, е да зададете команден ред или променлива на средата, за да профилирате скрипт. Или можете също да включите бутона за избор на уеб страница, за да профилирате скрипта. В резултат на това не е нужно да инструментирате кода си ръчно.

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

  Как да деактивирате разделен екран в Safari

Може да събира данни, без да напуска контекста. Неговият уеб интерфейс позволява конфигуриране/разрешаване на профилиране за сесията на браузъра, която се използва в момента, и изброява всички детайли и отчети за профилирания скрипт. Уеб потребителският интерфейс ви позволява да изберете конкретен отчет за по-задълбочен анализ и включва някои интерактивни визуализации като Flamegraph, плосък профил и времева линия, които могат да се мащабират до милиони функционални повиквания.

Префикс

Префикс от Stackify е лесен за инсталиране и лек профилиращ код, който много разработчици харесват. Помага ви да премахнете тесните места в работата на вашето приложение, за да го оптимизирате и да подобрите потребителското изживяване.

Превъзходните възможности за проследяване и профилиране на Prefix ви позволяват бързо да намирате скрити изключения, бавни SQL заявки и др. Той предоставя на вашите разработчици истинската мощ на APM (наблюдение на производителността на приложенията). За тази цел Prefix валидира производителността на кода по начина, по който е написан, и ви позволява да натискате по-добре работещи кодове за тестване.

По този начин той получава по-малко заявки за поддръжка от производствената страна и помага на мениджърите по разработката да постигнат целите по-рано. Открийте всички неефективни заявки, неизвестни тесни места и генерирани от ORM заявки.

Можете също така да проследявате всеки параметър на SQL извикване, да изтегляте времената и да преглеждате засегнатите записи. Префиксът също така улеснява разпознаването на N+1 модели. Забравете за сортирането на всички тези разхвърляни регистрационни файлове; съберете ги заедно, за да намерите проблемите лесно.

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

Prefix работи на Windows и Mac и поддържа .Net, Ruby, Java, PHP, Python и Node.js.

Скален

Скален е високо прецизен, високопроизводителен GPU, CPU и профилиращ инструмент за памет за базирани на Python програми. Той предлага няколко предимства пред други профайлъри, като изпълнение на поръчки с по-бързи величини и предоставяне на по-задълбочена информация.

Scalene е невероятно бърз и използва вземане на проби, а не инструменти. Той дори не разчита на средствата за проследяване на Python. В допълнение към това, неговите режийни разходи обикновено са под 10-20%. Този инструмент извършва софтуерно профилиране на ниво линия и посочва онези редове от кодове, които отговарят за времето за изпълнение на вашата програма.

Тези детайли са по-ценни от тези при профилиране на функционално ниво. Scalene разделя времето, прекарано само в Python, от това на родния код, който включва библиотеки. Тъй като повечето програмисти на Python няма да оптимизират производителността на естествения код, разработчиците могат да съсредоточат усилията си върху оптимизиране на кодове, които всъщност можете да подобрите.

Той подчертава горещите точки в червено, което ви улеснява да забележите разпределението на процесорно време/памет и лесно отделяте системното време за намиране на I/O проблеми. 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 моментни снимки при поискване, за да ви помогне да разкриете неефективността на използването на паметта и да отстраните грешки при изтичане на памет.

  Пълен контрол на всяко приложение върху ориентацията на вашето устройство

Освен това 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, който събира няколко проследявания на стека и метрики за Spark/Hadoop JVM процеси по разпределен начин, например памет/CPU/IO метрики.

Инструментът може да проследява java аргументи и методи на потребителски кодове, без да ги променя. Можете също да го използвате, за да проследите латентността на повикванията на възли с имена на HDFS за всяко приложение на Spark и да откриете проблеми. Той дори може да проследи HDFS файловите пътища на приложението Spark, за да открие горещи файлове и да извърши допълнителна оптимизация.

Uber JVM Profiler е създаден първоначално за профилиране на приложения на Spark, които обикновено включват много машини или процеси за едно приложение. Следователно хората могат лесно да корелират показателите за тези машини или процеси.

Инструментът обаче работи като типичен Java Agent и можете да го използвате за всеки от вашите JVM процеси. Характеристиките му включват:

  • Отстраняване на грешки в използването на паметта на изпълнители на приложения на Spark, като например java heap памет, собствена памет, не-heap памет, буферен пул и пул памет
  • Отстраняване на грешки при използване на процесора и време за събиране на отпадъци
  • Отстраняване на грешки в методите на Java клас за тяхната честота и време или профилиране на продължителността
  • Профилиране на аргументи (отстраняване на грешки и проследяване на извикване на метод на java клас и неговата стойност на аргумент)
  • Профилиране на Stacktrack и генериране на Flamegraphs за процесорно време
  • Дебъгване на I/O метрики и JVM Thread метрики

Трейси

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

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

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

впроф

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

Предлага се под BSD лиценз и поддържа Python 3.4 и по-нова версия.

Заключение

Производителността на приложението е решаващ фактор за изпълнение на очакванията на крайните потребители. И ако възникнат проблеми с производителността, трябва да сте готови да диагностицирате проблема, преди да повлияете на изживяването на крайния потребител.

Следователно, продължавайте да оптимизирате приложенията си и отстранявайте проблемите незабавно, за да продължите да предоставяте супер бърза производителност на приложенията на потребителите, като използвате инструментите, които споменах в тази статия.

Ето бърза таблица за сравнение, показваща горните профайлери и за какво се използват най-вече.

Име
Езици
py-шпионин
Python
Пироскоп
Python, Ruby, Go
Bubbleprof
Node.js
Pyinstrument
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