τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Επισκόπηση εργαλείων που σχετίζονται με τη συλλογή και ανάλυση απόδοσης
Υπάρχουν πολλά εργαλεία για τη συλλογή, την ανάλυση και την εμφάνιση δεδομένων απόδοσης εφαρμογών για κινητά, τα οποία μπορούν να χωριστούν χονδρικά στις ακόλουθες κατηγορίες. Για παράδειγμα, τα εργαλεία απόδοσης για κινητά που μπορούν να συλλέξουν πολλαπλούς δείκτες απόδοσης, το perfdog και το Solopi, μεταξύ των οποίων το Solopi είναι ανοιχτού κώδικα και το pefdog είναι ένα εμπορικό εργαλείο. Εργαλεία που μπορούν να εκτελέσουν ανάλυση σφαλμάτων, όπως το εμπορικό Firebase Crashlytics και το εργαλείο ανοιχτού κώδικα Sentry. Εάν χρειάζεται να αναλύσετε δεδομένα που σχετίζονται με το δίκτυο, μπορείτε να χρησιμοποιήσετε το Charles ή το Wireshark. Επιπλέον, υπάρχουν ολοκληρωμένα εργαλεία διαχείρισης απόδοσης, όπως το Dynatrace. Σε γενικές γραμμές, οι δυνατότητες, η ακρίβεια και η εμπειρία του χρήστη των εμπορικών εργαλείων είναι σίγουρα καλύτερες από τα εργαλεία ανοιχτού κώδικα Ως προσωπική μελέτη και έρευνα, μπορώ να ξεκινήσω μόνο από εργαλεία ανοιχτού κώδικα. Επομένως, κατά τη σύνταξη αυτού του ιστολογίου, θα χρησιμοποιήσουμε επίσης εργαλεία ανοιχτού κώδικα ως παραδείγματα.
Εργαλείο δοκιμής απόδοσης για κινητά:
PerfDog: Ένα εργαλείο παρακολούθησης της απόδοσης της εφαρμογής, της CPU, της μνήμης, της κατανάλωσης ενέργειας και άλλων δεδομένων, που υποστηρίζει δοκιμές απόδοσης και παρακολούθηση εφαρμογών για κινητές συσκευές σε πραγματικό χρόνο.
Solopi: εστιάζει στη δοκιμή και την παρακολούθηση της απόδοσης των εφαρμογών για κινητά, συμπεριλαμβανομένης της παρακολούθησης σε πραγματικό χρόνο του ρυθμού καρέ, της CPU, της μνήμης και άλλων δεικτών.
Εργαλείο ανάλυσης σφαλμάτων:
Firebase Crashlytics: Ένα ισχυρό εργαλείο αναφοράς και ανάλυσης σφαλμάτων που παρέχεται από την Google που μπορεί να παρακολουθεί τα σφάλματα εφαρμογών σε πραγματικό χρόνο.
Sentry: Ένα εργαλείο παρακολούθησης σφαλμάτων ανοιχτού κώδικα που υποστηρίζει πολλαπλές πλατφόρμες, συμπεριλαμβανομένης της αναφοράς σφαλμάτων και της παρακολούθησης απόδοσης εφαρμογών για κινητές συσκευές.
Εργαλεία δοκιμής απόδοσης δικτύου:
Charles Proxy: Ένα εργαλείο διακομιστή μεσολάβησης εντοπισμού σφαλμάτων δικτύου που καταγράφει και αναλύει δεδομένα αιτημάτων και απόκρισης δικτύου για εφαρμογές για κινητές συσκευές.
Wireshark: Ένα εργαλείο ανάλυσης δικτύου ανοιχτού κώδικα που υποστηρίζει τη λήψη και την ανάλυση πακέτων δικτύου εφαρμογών για κινητές συσκευές.
Εργαλεία APM(Διαχείριση απόδοσης εφαρμογής):
Dynatrace: Μια εγγενής λύση παρακολούθησης απόδοσης πλήρους στοίβας στο cloud που υποστηρίζει παρακολούθηση απόδοσης εφαρμογών για κινητά και ανάλυση εμπειρίας χρήστη.
Ποιες μετρήσεις απόδοσης συλλέγονται και πώς
Προτού εκτελέσετε ανάλυση απόδοσης, πρέπει πρώτα να κατανοήσετε τη σημασία κάθε δείκτη απόδοσης Λαμβάνοντας ως παράδειγμα τους δείκτες απόδοσης που συλλέγει η Solopi, ας ρίξουμε μια ματιά στους κοινούς δείκτες απόδοσης εφαρμογών για κινητά και πώς μπορούν να συλλεχθούν αυτοί οι δείκτες.
Ρυθμός καρέ
Ο τύπος για τον υπολογισμό του ρυθμού καρέ είναι:Ρυθμός καρέ = αριθμός καρέ που σχεδιάστηκαν/χρονική περίοδος,Ο στοχευόμενος ρυθμός καρέ για τους περισσότερους προγραμματιστές εφαρμογών και παιχνιδιών είναι60 FPS( καρέ/δευτερόλεπτο), γιατί ο στοχευόμενος ρυθμός καρέ είναι 60 FPS; Επειδή ο ρυθμός ανανέωσης οθόνης των περισσότερων σύγχρονων smartphone και tablet είναι 60 Hz, εφόσον ο ρυθμός καρέ φτάσει τα 60 FPS, δηλαδή ο αριθμός των καρέ που τραβιέται ανά δευτερόλεπτο είναι 60, τα οπτικά εφέ του χρήστη θα είναι πιο ομαλά και δεν θα υπάρχει καθυστέρηση. Το ελάχιστο δεν μπορεί να είναι μικρότερο από 30 FPS Αυτό συμβαίνει επειδή η οθόνη εμφανίζει επανειλημμένα την εικόνα του προηγούμενου καρέ, ενώ περιμένει ένα νέο καρέ, με αποτέλεσμα η εικόνα να μην είναι ομαλή. Οι υψηλές μπορούν να φτάσουν τα 90 FPS (για παράδειγμα, για συσκευές με υψηλούς ρυθμούς ανανέωσης).
Πώς να συλλέξετε πληροφορίες για το ρυθμό καρέ
Υπάρχουν δύο τρόποι συλλογής ρυθμού καρέ Ο ένας είναι να χρησιμοποιήσετε την κλάση Choreographer για τη συλλογή στατιστικών ρυθμών καρέ.Ένας άλλος τρόπος είναι να χρησιμοποιήσετε εργαλείο gfxinfo. Λαμβάνοντας ως παράδειγμα το Solopi, ο χρόνος χρονικού πλαισίου εντός 1 δευτερολέπτου υπολογίζεται επίσης μέσω των πληροφοριών του εργαλείου gfxinfo και συνάγεται ο πραγματικός ρυθμός καρέ, επομένως, όταν είναι κοντά στο σταθερό, μέρος του ρυθμού καρέ μπορεί να εμφανιστεί εσφαλμένα. Συνιστάται η διεξαγωγή δοκιμής ρυθμού καρέ σε δυναμικά σενάρια όπως η ολίσθηση ή η εναλλαγή σελίδας. Η μέθοδος gfxinfo μπορεί να συλλέξει πληροφορίες ρυθμού καρέ για όλες τις εφαρμογές και είναι πολύ κατάλληλη ως εργαλείο συλλογής δεδομένων απόδοσης. Επομένως, εδώ, εστιάζουμε επίσης στον τρόπο συλλογής πληροφοριών ρυθμού καρέ μέσω του gfxinfo.
Υπάρχουν δύο βασικά βήματα για τη συλλογή πληροφοριών ρυθμού καρέ.βήμα πρώτο: Λάβετε πληροφορίες gfxinfo μέσω της εντολής adb,Βήμα 2 : Αναλύστε τις πληροφορίες και υπολογίστε τις πληροφορίες για το ρυθμό καρέ. Το περιεχόμενο των πληροφοριών gfxinfo είναι κατά προσέγγιση ως εξής:
Στατιστικά από τότε: Ο χρόνος έναρξης των στατιστικών, η μονάδα είναι νανοδευτερόλεπτα.
Σύνολο αποδοθέντων καρέ: Συνολικός αριθμός πλαισίων που έχουν αποδοθεί.
Janky καρέ: Ο αριθμός των janky καρέ, δηλαδή ο αριθμός των καρέ που υπερβαίνουν τα 16ms (διάστημα ανανέωσης 60 καρέ ανά δευτερόλεπτο).
Ποσοστό Janky καρέ: Η αναλογία των janky καρέ προς τον συνολικό αριθμό καρέ.
90ο εκατοστημόριο: 90ο εκατοστημόριο, που υποδεικνύει ότι το 90% των καρέ έχουν χρόνους απόδοσης κάτω από αυτήν την τιμή (σε χιλιοστά του δευτερολέπτου).
95ο εκατοστημόριο: 95ο εκατοστημόριο, που δείχνει ότι το 95% των καρέ έχουν χρόνους απόδοσης κάτω από αυτήν την τιμή (σε χιλιοστά του δευτερολέπτου).
99ο εκατοστημόριο: 99ο εκατοστημόριο, που δείχνει ότι το 99% των καρέ έχουν χρόνους απόδοσης κάτω από αυτήν την τιμή (σε χιλιοστά του δευτερολέπτου).
Number Missed Vsync: Ο αριθμός των μη συγχρονισμένων κατακόρυφων συγχρονισμών, δηλαδή ο αριθμός των πτώσεων καρέ που προκαλούνται από την αποτυχία έγκαιρης απόδοσης.
Αριθμός Υψηλή καθυστέρηση εισόδου: Ο αριθμός των υψηλών καθυστερήσεων εισόδου υποδεικνύει τον αριθμό των καθυστερήσεων που προκαλούνται από πολύ μεγάλο χρόνο επεξεργασίας συμβάντος εισόδου.
Αριθμός αργό νήμα διεπαφής χρήστη: Ο αριθμός των φορών που το νήμα διεπαφής χρήστη απάντησε αργά, δηλαδή ο αριθμός των φορών που το νήμα διεπαφής χρήστη χρειάστηκε πολύ χρόνο για να επεξεργαστεί.
Λαμβάνοντας ως παράδειγμα το Solopi, ο ρυθμός καρέ συνάγεται μέσω του χρόνου πλαισίου χρόνου στις πληροφορίες του gfxinfo Για τον κώδικα του συγκεκριμένου έργου, μπορείτε να δείτε τον πηγαίο κώδικα του solopi.
ποσοστό καθυστέρησης/αριθμός καθυστερήσεων
Αριθμός παγώσεων : Κατά τη διάρκεια της δοκιμαστικής περιόδου, ο αριθμός των περιόδων κατά τις οποίες ο ρυθμός καρέ ανιχνεύεται χαμηλότερος από το όριο. Κάθε φορά που ο ρυθμός καρέ πέφτει κάτω από το όριο για μια χρονική περίοδο, υπολογίζεται ως τραυλισμός. Το όριο εδώ μπορεί να προσαρμοστεί, για παράδειγμα, εάν είναι χαμηλότερο κατά 60 FPS από τον στοχευόμενο ρυθμό καρέ, μπορεί να καταγραφεί ως πάγωμα. Δηλαδή, αν ο χρόνος απόδοσης καρέ είναι μεγαλύτερος από 16 ms, υπολογίζεται ως κολλημένος.
ποσοστό υστέρησης : Το ποσοστό του χρόνου παγώματος προς το συνολικό χρόνο δοκιμής. Ας υποθέσουμε ότι σε μια δοκιμή, η εφαρμογή έτρεξε για 120 δευτερόλεπτα, κατά τη διάρκεια των οποίων ο ρυθμός καρέ ήταν χαμηλότερος από 16 FPS 4 φορές συνολικά και ο συνολικός χρόνος καθυστέρησης ήταν 8 δευτερόλεπτα, τότε: ο αριθμός των καθυστερήσεων: 4 φορές. Ποσοστό τραυλισμού: 8/120*100%=6,7%. Στο παραπάνω gfxinfo, υπάρχουν επίσης πληροφορίες δεδομένων σχετικά με το ποσοστό καθυστέρησης.
cpu/μνήμη
Λαμβάνοντας ως παράδειγμα το solopi, η CPU περιλαμβάνει το ποσοστό χρήσης της CPU της διαδικασίας όπου βρίσκεται η δραστηριότητα ανώτατου επιπέδου της εφαρμογής και το συνολικό ποσοστό χρήσης της CPU Εφαρμογές διεργασιών πολλαπλών διεργασιών, αυτά τα δεδομένα αντιπροσωπεύουν τη χρήση της διεπαφής χρήστη ανώτατου επιπέδου.
- import subprocess
-
- def get_memory_info(pid):
- try:
- # Run adb shell command to read /proc/<pid>/statm
- command = f"adb shell cat /proc/{pid}/statm"
- result = subprocess.check_output(command, shell=True)
- statm_data = result.decode('utf-8').strip().split()
-
- # Parse statm data
- size, resident, shared, text, lib, data, dt = map(int, statm_data)
-
- memory_info = {
- 'size': size, # total program size (pages)
- 'resident': resident, # resident set size (pages)
- 'shared': shared, # shared pages (pages)
- 'text': text, # text (code) size (pages)
- 'lib': lib, # library (unused since Linux 2.6; always 0)
- 'data': data, # data + stack (pages)
- 'dt': dt # dirty pages (unused since Linux 2.6; always 0)
- }
-
- return memory_info
- except subprocess.CalledProcessError as e:
- print(f"Error executing command: {e}")
- return None
- except Exception as e:
- print(f"Error: {e}")
- return None
-
- # Replace with your application's PID
- pid = '12345'
- memory_info = get_memory_info(pid)
- if memory_info:
- print(f"Memory info for PID {pid}:")
- print(f"Size: {memory_info['size']} pages")
- print(f"Resident set size (RSS): {memory_info['resident']} pages")
- print(f"Shared pages: {memory_info['shared']} pages")
- print(f"Text (code) size: {memory_info['text']} pages")
- print(f"Data + stack size: {memory_info['data']} pages")
δίκτυο
Λαμβάνοντας ως παράδειγμα το solopi, το δίκτυο Συμπεριλαμβανομένων των ρυθμών ανάντη και κατάντη εφαρμογών και της σωρευτικής επισκεψιμότητας, καθώς και των παγκόσμιων ρυθμών ανάντη και μεταγενέστερης ροής και της σωρευτικής επισκεψιμότητας. Ανήκει στα δεδομένα διαστάσεων εφαρμογής Τα συγκεκριμένα δεδομένα είναι όπως φαίνεται στο παρακάτω σχήμα.
Πώς να αποκτήσετε δεδομένα δικτύου;
Η λήψη δεδομένων δικτύου είναι ίδια με τη λήψη δεδομένων cpu/μνήμης και μπορεί να διαβαστεί απευθείας Λάβετε δεδομένα δικτύου από το αρχείο /proc/pid/net/dev ή αποκτήστε τα μέσω της εντολής adb (εντολή: adb shell cat /proc/pid/net/dev). Η παρακάτω εικόνα είναι μέρος του πηγαίου κώδικα του solopi Μπορείτε να δείτε ότι τα δεδομένα δικτύου του wlan0 μετρώνται εδώ Για συγκεκριμένη λογική, μπορείτε να ελέγξετε τον κώδικα NetworkTools.java κάτω από τον πηγαίο κώδικα. Φυσικά, όσον αφορά τα στατιστικά στοιχεία της κίνησης δικτύου, σφάλματα έχουν υποβληθεί και στο διαδίκτυο, επειδή το grep wlan0 εδώ μετράει μόνο την κίνηση wifi δικτύου, όχι την κίνηση από κινητά. Για λεπτομέρειες σφαλμάτων, βλεδώ。
Χρόνος απόκρισης
Πάρτε το solopi ως παράδειγμα, Περιέχει δεδομένα χρόνου απόκρισης και χρόνου ανανέωσης για κλικ σε εφαρμογές. Ανήκει στα δεδομένα διαστάσεων εφαρμογής. Ο χρόνος από το κλικ του χρήστη έως την πρώτη φορά που το σύστημα εκδίδει μια ενημέρωση διεπαφής είναι ο χρόνος απόκρισης και ο χρόνος έως ότου το σύστημα σταματήσει να ανανεώνει τη διεπαφή είναι ο χρόνος ανανέωσης. Η λογική της μέτρησης του χρόνου απόκρισης είναι να διαιρεθεί η εγγραφή της οθόνης σε καρέ Σύμφωνα με τον επίσημο ιστότοπο της Solopi, αναγνωρίζει αυτόματα το πλαίσιο έναρξης και το τελικό πλαίσιο για να μετρήσει το χρόνο απόκρισης Όταν χρησιμοποιείτε πραγματικά το Solopi Ο χρόνος απόκρισης δεν είναι σωστός Για παράδειγμα, όταν ο χρήστης κάνει κλικ στο Start, στο Όταν κάνετε κλικ στη σελίδα της εφαρμογής, ο χρόνος λειτουργίας της ταχύτητας με το χέρι κάποιου στη μέση περιλαμβάνεται και αυτό το μέρος υπολογίζεται στον χρόνο απόκρισης. Επομένως, εάν θέλετε να υπολογίσετε τον χρόνο απόκρισης της προετοιμασμένης σελίδας, είναι πιο ακριβές να καταγράψετε μόνο την οθόνη και να προσδιορίσετε χειροκίνητα τα πλαίσια έναρξης και τέλους της σελίδας. Τα συγκεκριμένα βήματα για την εγγραφή πλαισίων οθόνης είναι τα εξής:
Τα παραπάνω αποτελούν κατανόηση της σημασίας των κοινών δεικτών απόδοσης σε εφαρμογές για κινητές συσκευές, καθώς και λεπτομερείς οδηγίες σχετικά με τον τρόπο συλλογής τους. Σχετικά με το crash κ.λπ., θα το παρουσιάσουμε αναλυτικά σε επόμενο blog.