Instruments — bu nədir, Time Profiler və Allocations imkanları

Müəllif: IT Sectr Dərc olunub: 2026-03-30 Oxuma vaxtı: 9 dəq

Instruments — iOS, macOS, tvOS və watchOS üçün tətbiqlərin performansını analiz etmək üçün Xcode-a daxil edilmiş profilerdir. Alət CPU, yaddaş, şəbəkə, qrafika və enerji istehlakını real vaxtda ölçmək üçün şablonlar dəsti təqdim edir. Apple Developer Documentation-ya görə, Instruments inkişafın bütün mərhələlərində istifadə olunur — sızıntıların axtarışından tətbiqin başlanma vaxtının optimallaşdırılmasına qədər.

Əsas

  • Instruments — Apple-dan iOS, macOS, tvOS və watchOS üçün profiler, Xcode-a daxildir.
  • Time Profiler hər bir thread və metod üzrə CPU yükünü mikrosaniyə dəqiqliyi ilə ölçür.
  • Allocations Heapshot dəstəyi ilə yaddaş ayırmalarını real vaxtda izləyir.
  • Leaks əl ilə heap dump olmadan retain cycles və yaddaş sızıntılarını avtomatik tapır.
  • Energy Log tətbiqin batareyaya təsirini sistemin hər bir komponenti üzrə göstərir.

Instruments nədir?

Instruments — Xcode-un tərkib hissəsi olan və Sun Microsystems tərəfindən hazırlanmış DTrace texnologiyasına əsaslanan profilləşdirmə və izləmə sistemidir. Instruments onlarla profilləşdirmə alətini (şablonu) vahid interfeysdə birləşdirir: sadəcə şablon seçmək, tətbiqi Xcode vasitəsilə işə salmaq və məlumat toplamağa başlamaq kifayətdir.

Instruments-in arxitekturası müştəri-server modelinə əsaslanır: cihazdakı agent məlumatları toplayır və USB bağlantısı vasitəsilə Mac-a ötürür. Bu, profilerin tətbiqin performansına təsirini minimuma endirir — Instruments əsasən host tərəfində işləyir. WWDC 2022-yə görə, 1 ms seçmə tezliyində Time Profiler-in yükü 3%-dən azdır.

Instruments xüsusi şablonları dəstəkləyir — tərtibatçı bir profilləşdirmə seansında bir neçə aləti birləşdirə bilər. Məsələn, eyni vaxtda Time Profiler + Allocations + Leaks işə salmaq və CPU pikləri ilə yaddaş ayırmaları arasında korrelyasiyanı görmək. Bu, hər bir komponentin təcrid olunmuş analizində mümkün olmayan vahid performans mənzərəsini verir.

Hansı şablonlar standart olaraq mövcuddur

Xcode 16 əvvəlcədən quraşdırılmış Instruments şablonu ilə gəlir: Time Profiler, Allocations, Leaks, Energy Log, Network, Core Animation, Metal System Trace, File Activity, System Trace və digərləri. Hər bir şablon müəyyən bir tapşırıq üçün optimallaşdırılıb və müvafiq trigger və filtr parametrləri ilə əvvəlcədən konfiqurasiya olunub.

Time Profiler: CPU performans analizi

Time Profiler — ən çox istifadə olunan Instruments şablonudur. O, çağırış yığınının seçilməsi əsasında işləyir: hər 1-10 millisaniyədən bir sistem tətbiqin bütün thread-lərinin çağırış yığınını qeyd edir. Seans dayandırıldıqdan sonra Instruments nümunələri cəmləyir və hansı metod və funksiyaların daha çox vaxt apardığını göstərir. Nəticə Self Weight-ə görə sıralanmış Call Tree — çağırışlar ağacı şəklində təqdim olunur.

Time Profiler-in əsas metriki — Self Weight (metodda birbaşa sərf olunan vaxt, uşaq metodların çağırışları istisna olmaqla). Məhz Self Weight göstərir ki, hansı funksiyalar prosessoru həqiqətən yükləyir. Weight (uşaq metodlarla ümumi vaxt) aldadıcı ola bilər: yüksək Weight olan metod sadəcə başqa yavaş metodu çağıra bilər, özü isə sürətli ola bilər.

swift
import UIKit

class ImageGalleryViewController: UIViewController {
    // Time Profiler göstərəcək ki, cellForItemAt Self Weight = 40% var
    // onun içərisində decodeImage 35% tutur — bu dar boğazdır

    func collectionView(
        _ collectionView: UICollectionView,
        cellForItemAt indexPath: IndexPath
    ) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(
            withReuseIdentifier: "ImageCell",
            for: indexPath
        ) as! ImageCell
        // ❌ decodeImage — dar boğaz (Self Weight = 35%)
        cell.imageView.image = UIImage(contentsOfFile: imagePath)
        return cell
    }
}

Time Profiler analizində com.apple.main-thread-də icra olunan metodlara diqqət yetirin. Əgər əsas thread-də Self Weight kadr başına 16 ms həddini keçərsə — UI ləngiyəcək. Belə problemlərin həlli — şəkillərin dekodlanması, layout hesablamaları və məlumat emalının əsas thread-dən Grand Central Dispatch (GCD) vasitəsilə fon thread-lərinə köçürülməsidir.

Time Profiler-də Call Tree-ni necə oxumaq

Call Tree — Self Weight-ə görə sıralanmış bütün metod çağırışlarının iyerarxik təsviridir. Call Tree-də ən ağır metod — birinci sətirdir. Sətri genişləndirərək, bu metodun hansı uşaq metodları çağırdığını və onların nə qədər vaxt apardığını görürsünüz. Self Weight-in (öz vaxtı) Weight-dən (ümumi vaxt) əhəmiyyətli dərəcədə çox olduğu metodları axtarın — bu sinxron blokadaların və gözləmənin əlamətidir.

Allocations: real vaxtda yaddaş izləmə

Allocations — tətbiqin bütün yaddaş ayırmalarını izləmək üçün alətdir. Hansı obyektlərin, hansı miqdarda və hansı ümumi ölçüdə hər an yaradıldığını göstərir. Android Studio-dakı Memory Profiler-dən fərqli olaraq, Allocations Heapshot — iki şəkli müqayisə etmək imkanı ilə canlı obyektlərin anlıq şəklini dəstəkləyir.

Allocations interfeysi iki əsas bölmədən ibarətdir: All Allocations (bütün obyekt növləri üzrə ümumi statistika) və Call Trees (obyektləri yaradan metodlar üzrə bölgü ilə çağırışlar ağacı). Sızıntıları tapmaq üçün Heapshot Analysis-dən istifadə edin: ssenarini icra etməzdən əvvəl şəkil çəkin, ssenarini icra edin, sonra şəkil çəkin — və hansı yeni obyektlərin yaddaşda qaldığını müqayisə edin.

Apple Developer Documentation-ya görə, Allocations vasitəsilə aşkar edilən ən geniş yayılmış sızıntı nümunəsi — kolleksiyaların sürüşdürülməsi zamanı UIView və CALayer-in həddindən artıq yaradılmasıdır. Əgər hər sürüşdürmədə canlı UIView-lərin sayı artırsa, kolleksiya isə hüceyrələri təkrar istifadə edirsə — hardasa köhnələri azad etmədən əlavə view-lər yaradılır. Allocations bu view-lərin harada yaradıldığını dəqiq çağırış yığınını göstərir.

ParametrTəsvirNəyə baxmaq
# LivingBu tip canlı obyektlərin sayıSsenari təkrarlandıqda sabit olmalıdır
# TransientDövr ərzində yaradılmış və azad edilmiş obyektlərKəskin artımlar — həddindən artıq ayırmaların əlaməti
Total BytesBu tip yaddaşın ümumi həcmiCihazın ümumi mövcud RAM-ı ilə müqayisə edin

Heapshot Analysis: yaddaş şəkillərinin müqayisəsi

Heapshot — Allocations-da canlı obyektlərin anlıq şəklidir. Ssenarini icra etməzdən əvvəl Heapshot çəkin, ssenarini icra edin və ikinci Heapshot çəkin. Şəkillər arasındakı fərq hansı obyektlərin yaradıldığını və azad edilmədiyini göstərəcək. İdeal nəticə — yalnız müvəqqəti obyektlərin (Autorelease pool) artımı. Dəqiq analiz üçün bir seansda Allocations + Leaks kombinasiyasından istifadə edin. Allocations hansı obyektlərin azad edilmədiyini, Leaks isə niyə (hansı güclü istinadın onları saxladığını) göstərir. Hər sızıntı şübhəsində ikiqat seans işə salın.

Leaks: yaddaş sızıntılarının avtomatik axtarışı

Leaks — iOS və macOS tətbiqlərində yaddaş sızıntılarını aşkar etmək üçün ixtisaslaşmış alətdir. Sadəcə ayırmaları göstərən Allocations-dan fərqli olaraq, Leaks retain cycles — iki və ya daha çox obyektin bir-birini güclü istinadlarla saxladığı vəziyyətləri axtarmaq üçün yığını aktiv şəkildə skan edir.

Leaks Cycles & Roots — obyekt saxlama qrafının vizuallaşdırıcısı ilə birlikdə işləyir. Sızıntı aşkar edildikdə, Leaks dövrədəki bütün obyektləri, onların retain count-nu və istinadların ötürüldüyü dəqiq sahələri göstərir. Tərtibatçı qrafa baxıb hansı istinadın weak ilə əvəz edilməli olduğunu anlamalıdır.

Alət sızıntıları zaman xəttində qırmızı markerlə avtomatik vurğulayır. Leaks real vaxtda işləyir: sistem sızıntını aşkar edən kimi dərhal tərtibatçıya xəbər verir. Bu, problemləri dump və post-analiz gözləmədən yerində düzəltməyə imkan verir.

WWDC 2022-yə görə, Leaks hətta mürəkkəb çoxsəviyyəli retain cycles — məsələn, üç və ya daha çox obyektin qapalı güclü istinad zənciri yaratdığı halları belə aşkar edə bilir. Belə dövrələrin diaqnostikası üçün Cycles & Roots qrafı əvəzolunmazdır: obyektlərin bir-birinə necə bağlandığını vizual olaraq göstərir.

Cycles & Roots qrafını necə oxumaq

Qrafın hər bir düyünü obyektdir, hər bir ox — güclü istinaddır. Dövrə — oxların qapalı konturudur. Düyünün rəngi statusu göstərir: qırmızı — sızan obyekt, yaşıl — kök (GC Root), boz — aralıq obyekt. Sızıntını düzəltmək üçün məntiqi pozmadan weak edilə bilən oxu tapın — və koddakı istinad növünü dəyişdirin.

Energy Log: enerji istehlakı analizi

Energy Log — tətbiqin enerji istehlakını ölçmək üçün Instruments şablonudur. Cihazın aparat sensorlarından məlumat toplayır: CPU yükü, Wi-Fi və mobil şəbəkə vəziyyəti, GPS istifadəsi, displey və Bluetooth. Energy Log tətbiqdə hansı əməliyyatların daha çox batareya istehlakına səbəb olduğunu göstərir və onları zaman şkalası üzrə enerji istehlakı qrafikinə yerləşdirir.

Alət əməliyyatları enerji səviyyəsinə görə təsnif edir: aşağı (prosessorun normal işi), orta (Wi-Fi ötürülməsi), yüksək (GPS, mobil şəbəkə, GPU). Əgər Energy Log uzun müddət ərzində yüksək səviyyənin qırmızı göstəricilərini göstərirsə — tətbiq fonda batareyanı boşaldır və istifadəçi tərəfindən silinəcək.

Energy Log tərəfindən aşkar edilən tipik problemlər: vaxt məhdudiyyəti olmayan WakeLock (tətbiq tapşırığı bitirdikdən sonra prosessoru aktiv saxlayır), yüksək dəqiqlikli Location Updates fonda (hər bir neçə saniyədən bir koordinat sorğusu), şəbəkə sessiyalarının anomaliyaları (tez-tez serverə yenidən qoşulma). Energy Log hər bir belə insidenti qeyd etməyi və enerji tutumlu əməliyyatı söndürmək üçün şərt əlavə etməyi tövsiyə edir.

Enerji istehlakını test etmək üçün batareya ilə işləyən real cihazdan istifadə edin — emulyatorda enerji istehlakı göstəriciləri düzgün deyil. CI-da batareya istehlakını avtomatlaşdırılmış şəkildə yoxlamaq üçün Energy Log-u UI testləri ilə birlikdə işə salın.

Instruments-i işə salmaq və nəticələri şərh etmək

Instruments-i işə salmaq Xcode-dan iki yolla edilir: Product → Profile (⌘I) menyusu vasitəsilə və ya Launchpad-də Instruments-i ayrıca tətbiq kimi açmaqla. Birinci üsul daha rahatdır: Xcode avtomatik olaraq tətbiqi profilləşdirmə rejimində yığır və seçilmiş şablonla qoşulmuş cihazda işə salır. Seans dayandırıldıqdan sonra Instruments izləməni .trace genişlənməsi olan faylda saxlayır.

Nəticələrin şərhi şablondan asılıdır. Time Profiler üçün Self Weight-ə görə sıralanmış Call Tree-yə baxın — ən yüksək metodlar sizin əsas dar boğazlarınızdır. Allocations üçün — tsiklik ssenaridən sonra # Living-ə baxın: obyektlərin sayı artıbsa, sızıntı axtarın. Leaks üçün — qırmızı markerlərə və Cycles & Roots qrafına baxın. Optimizasiyadan əvvəl və sonra nəticələri müqayisə edin — bu, dəyişikliklərin effektivliyini təsdiqləməyin yeganə yoludur.

swift
// CI-da Instruments üçün komanda sətri
// Instruments-in CI/CD pipeline-a inteqrasiyası
import XCTest

class PerformanceTests: XCTestCase {
    func testScrollPerformance() {
        // Kolleksiyanın sürüşdürülmə vaxtını ölçürük
        measure(metrics: [XCTCPUMetric(), XCTMemoryMetric()]) {
            app.scrollToBottom()
        }
    }
}

CI-da Instruments-i komanda sətri vasitəsilə xcodebuild -showBuildSettingsxcrun xctrace ilə işə salmaq olar. Bu, hər commit-də profilləşdirməni avtomatlaşdırmağa və reqressiyanı qaçırmamağa imkan verir. Analiz üçün Baseline müqayisəsindən istifadə edin: əgər metrik əvvəlki commit-ə nisbətən 5% pisləşibsə, pipeline dayanmalıdır.

Instruments ilə işləyərkən əsas səhvlər: cihaz əvəzinə simulyatorda profilləşdirmə (CPU və GPU məlumatları düzgün deyil), ssenarisiz məlumat toplama (nəticələr təsadüfi olur), Call Tree-ni göz ardı etmə (yalnız qrafikə baxmaq, konkret metodlara deyil). Bu səhvlərin düzəldilməsi profilləşdirmə keyfiyyətinin 80%-ni təmin edir.

Tez-tez verilən suallar

SwiftUI tətbiqləri üçün Instruments istifadə etmək olarmı?

Bəli, Instruments SwiftUI-ni tam dəstəkləyir. UI performans analizi üçün Core Animation şablonundan istifadə edin — o, kadrların göstərilmə sürətini göstərir və lazımsız View yenidən çəkilmələrini aşkar edir. Time Profiler və Allocations da SwiftUI ilə məhdudiyyətsiz işləyir.

Instruments Shark-dan (LeakCanary-nin daxili analizatoru) nə ilə fərqlənir?

Instruments — CPU, yaddaş, şəbəkə, qrafika və enerji istehlakını əhatə edən bütün Apple ekosistemi üçün universal profilerdir. Shark — LeakCanary-də yalnız Android-də yaddaş sızıntılarının axtarışı üzrə ixtisaslaşmış daxili heap dump analizatorudur.

Instruments-i tətbiqdən buraxılışdan əvvəl silmək lazımdırmı?

Instruments tətbiqin koduna daxil edilmir — bu, Xcode vasitəsilə işləyən prosesə qoşulan xarici alətdir. Koda heç bir dəyişiklik etmək lazım deyil. .trace faylları sadəcə loqlardır, ikili fayla daxil olmurlar.

Time Profiler-in yükü nə qədərdir?

Standart 1 ms seçmə tezliyində Time Profiler-in yükü 3%-dən azdır. Dəqiq izləmə rejimində (hər funksiya çağırışı) yük 20-30%-ə çata bilər, buna görə gündəlik profilləşdirmə üçün seçmə istifadə olunur. Dəqiq izləmə yalnız kritik hissələr üçün lazımdır.

Instruments nəticələrini necə ixrac etmək olar?

Nəticələr avtomatik olaraq layihə qovluğunda .trace faylına saxlanılır. Fayl birgə analiz üçün Xcode ilə başqa Mac-da açıla bilər. Mətn formatına ixrac üçün xcrun xctrace export --input file.trace --output result.xml istifadə edin.

Nəticə

  • Instruments — performansın bütün aspektləri üçün şablonlar dəsti ilə Xcode-a daxil edilmiş Apple profileri.
  • Time Profiler çağırış yığınının seçilməsi ilə CPU dar boğazlarını tapır — optimallaşdırmanın əsas aləti.
  • Allocations Heapshot Analysis dəstəyi ilə yaddaş ayırmalarını real vaxtda izləyir.
  • Leaks retain cycles-i avtomatik aşkar edir və obyekt saxlama qrafını vizuallaşdırır.
  • Energy Log tətbiqin batareyaya təsirini ölçür, əməliyyatları enerji səviyyəsinə görə təsnif edir.
  • Profilləşdirməni real cihazda işə salın, ssenarilərdən istifadə edin və mütləq baseline ilə müqayisə edin.
  • Instruments-in XCTest və xcrun xctrace vasitəsilə CI-a inteqrasiyası performans reqressiyasının qarşısını alır.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun