Bosh sahifa Wiki Profiling

Profiling

Profiling — dastur ishlayotgan paytda vaqt, CPU, xotira, allocation, lock yoki I/O sarfi qaysi funksiya va kod yo‘liga to‘g‘ri kelishini o‘lchash usuli. Profiler performance muammosining qayerda ekanini dalil bilan ko‘rsatadi. U benchmarkdan farqli ravishda umumiy natijani emas, sarfning ichki taqsimotini tahlil qiladi.

CPU profiling

Instrumentation profiler funksiya kirish-chiqishiga o‘lchov kodi qo‘shib, chaqiruv soni va davomiyligini yig‘adi. Tafsiloti yuqori, ammo juda qisqa funksiyalarga sezilarli overhead berishi mumkin. Sampling profiler esa ma’lum intervalda call stackni namuna oladi; ko‘p uchragan frame CPU vaqtining katta qismini egallaganini ko‘rsatadi.

Flat profile funksiyaning self time qiymatini, call tree esa caller va callee munosabatini beradi. Inclusive time funksiya va uning chaqirgan kodini, exclusive time faqat funksiyaning o‘zini o‘lchaydi. Rekursiya va async tasklar call tree talqinini murakkablashtirishi mumkin.

Xotira profiling

Allocation profiler qaysi kod qancha obyekt va bayt ajratganini ko‘rsatadi. Heap snapshot ma’lum vaqtdagi obyektlar va reference graphni saqlaydi. Ikki snapshot orasidagi o‘sish memory leakni topishga yordam beradi. Obyektning heapda qolishi har doim leak emas; cache yoki singleton uni qonuniy ushlab turishi mumkin.

Retained size obyekt o‘chsa, u bilan birga bo‘shaydigan xotirani baholaydi. Dominator tree katta saqlovchi yo‘llarni topadi. Managed runtime da garbage collection chastotasi, pause va generation promotion allocation tezligi bilan birga ko‘riladi.

Wall time va kutish

CPU profili sekin requestni har doim tushuntirmaydi. Thread database, disk, network yoki lockni kutsa, wall time katta, CPU time esa kichik bo‘ladi. Off-CPU profiling bloklangan stacklarni o‘lchaydi. Distributed tracing xizmatlar orasidagi kutishni, database slow query log esa server ichidagi so‘rov vaqtini ko‘rsatadi.

Lock profiling contention, kutish muddati va lock egasini aniqlaydi. Event-loop tizimida uzoq synchronous funksiya barcha requestni kechiktirishi mumkin; event loop lag metrikasi va stack sample birga ishlatiladi.

Overhead va muhit

Profiler dasturning xatti-harakatini o‘zgartiradi. Yuqori chastotali sampling, allocation stack va instrumentation ko‘proq overhead beradi. Productionda past overheadli continuous profiler yoki qisqa nazoratli capture ishlatiladi. Maxfiy argument, URL yoki stack ma’lumoti profil fayliga tushishi mumkin, shu sababli kirish huquqi cheklanadi.

Profil debug build va optimizatsiyalangan buildda farq qiladi. Inlining funksiyani alohida frame sifatida yashirishi, symbol yo‘qligi native stackni o‘qishni qiyinlashtirishi mumkin. Runtime, binary va symbol versiyalari mos saqlanadi.

Tahlil jarayoni

Avval representative workload va tashqi latency o‘lchanadi. Profiler aynan muammo takrorlanayotgan oynada yoqiladi. Flame graph stack samplelarni kenglik bilan ko‘rsatadi: keng blok ko‘p sample olgan yo‘l, vertikal qatlam esa chaqiruv zanjiridir. Kenglikni bevosita “sekin funksiya” deb talqin qilishdan oldin self va child vaqt ajratiladi.

Optimallashtirishdan so‘ng profil va benchmark qayta olinadi. Hotspot kamayib, umumiy latency o‘zgarmasa, bottleneck boshqa qatlamga ko‘chgan bo‘lishi mumkin. To‘g‘rilik testlari performance o‘zgarishi semantikani buzmaganini tasdiqlaydi.

Profil formatlari

Profiler chiqishi vaqt seriyali sample, call tree, flame graph yoki runtimega xos binary fayl bo‘lishi mumkin. Binary profilni ochish uchun mos symbol va tool versiyasi talab etiladi. Profilga build ID qo‘shish noto‘g‘ri binary bilan symbolizatsiyani oldini oladi. Taqqoslash vositasi ikki profil orasidagi stack ulushi farqini ko‘rsatib, absolyut workload o‘zgarishini ham hisobga olishi kerak.

Bog‘liq tushunchalar

Sampling profiler, Flame graph, Heap snapshot, CPU time, Memory leak, Benchmarking