Προφίλ κώδικα PHP. Προφίλ της PHP με XHprof Ανάλυση της περιγραφής καταγραφής προφίλ

Έδειχνε πώς να εγκαταστήσετε και να ρυθμίσετε το xdebug και κάλυπτε ορισμένες βασικές δυνατότητες, όπως τη βελτίωση της εξόδου της συνάρτησης var_dump() ή την εκτύπωση ενός ίχνους στοίβας κλήσεων όταν λαμβάνετε ένα μήνυμα σφάλματος. Στο δεύτερο μέρος εξετάσαμε αυτό το χαρακτηριστικό xdebug ως ανίχνευση. Το ίχνος περιέχει όλες τις κλήσεις σε λειτουργίες και μεθόδους στο πρόγραμμα, χρόνο εκκίνησης, προαιρετικά μέγεθος μνήμης, παραμέτρους που έχουν περάσει και επιστρέφονται. Ένα αρχείο καταγραφής ανίχνευσης μπορεί να σας βοηθήσει να κατανοήσετε τη διαδρομή εκτέλεσης ενός πολύπλοκου προγράμματος. Αντί να εισάγετε κώδικα εντοπισμού σφαλμάτων μέσα στο πρόγραμμα, ενεργοποιείτε ή απενεργοποιείτε την ανίχνευση όπου χρειάζεται και, στη συνέχεια, χρησιμοποιείτε βοηθητικά προγράμματα όπως το grep ή τις δικές σας εφαρμογές PHP για να αναλύσετε το αρχείο καταγραφής.

Σε αυτό το άρθρο θα εξετάσουμε το προφίλ. Με την πρώτη ματιά, το προφίλ είναι παρόμοιο με τον εντοπισμό. Το αρχείο καταγραφής προφίλ δεν προορίζεται για ανθρώπους, δεν προορίζεται για την οπτικοποίηση της ροής ενός προγράμματος, αλλά μας παρέχει δεδομένα για στατιστική ανάλυση ενός προγράμματος που εκτελείται.

Δημιουργία αρχείου καταγραφής προφίλ

Παρακάτω είναι ένα σύντομο απόσπασμα από το αρχείο καταγραφής προφίλ που δημιουργήθηκε από το xdebug:

fl=php:internal
fn=php::define
106 3

Fl=C:\www\drupal\includes\bootstrap.inc
fn=require_once::C:\www\drupal\includes\bootstrap.inc
1 648
cfn=php::define
κλήσεις=1 0 0
13 6
cfn=php::define
κλήσεις=1 0 0
18 4
cfn=php::define
κλήσεις=1 0 0
23 2


Όπως μπορείτε να δείτε, το αρχείο καταγραφής προφίλ δεν μπορεί να διαβαστεί απευθείας. Θα χρησιμοποιήσουμε πρόσθετα εργαλεία για να οπτικοποιήσουμε και να αναλύσουμε τα δεδομένα που λαμβάνονται. Έτσι, η δημιουργία προφίλ δείχνει πόσες φορές ξεκίνησε μια συγκεκριμένη γραμμή και πόσο χρόνο χρειάστηκε η εκτόξευση.
Η δημιουργία ενός αρχείου καταγραφής προφίλ υποβαθμίζει σημαντικά την απόδοση, παρόμοια με τη δημιουργία ενός αρχείου καταγραφής ίχνους, επειδή πρέπει να περιγράψετε το πέρασμα κάθε γραμμής. Επομένως, όπως και στην περίπτωση της ανίχνευσης, μην εκτελείτε το προφίλ σε διακομιστές παραγωγής... Ωστόσο, υπάρχουν περιπτώσεις που το προφίλ πρέπει να εκτελεστεί σε ζωντανό σύστημα. Σε αυτήν την περίπτωση, να είστε προσεκτικοί σχετικά με την εκτέλεση του xdebug ταυτόχρονα με άλλες επεκτάσεις Zend, όπως φορτωτές, βελτιστοποιητές ή κρυφές μνήμες.
Για να ξεκινήσει το xdebug να καταγράφει αρχεία καταγραφής προφίλ, προσθέστε

Λάβετε υπόψη ότι δεν μπορείτε να εκτελέσετε το προφίλ κατά την εκκίνηση εκτελώντας μια εντολή.
Δεδομένου ότι το αρχείο καταγραφής προφίλ προορίζεται για ανάγνωση από προγράμματα αναλυτών, δεν υπάρχουν πρόσθετες ρυθμίσεις που να σας επιτρέπουν να εμφανίζετε πρόσθετες πληροφορίες, όπως συμβαίνει με το αρχείο καταγραφής ιχνών. Ωστόσο, υπάρχουν ορισμένες ρυθμίσεις που σας επιτρέπουν να διαμορφώσετε το προφίλ, παρόμοιες με αυτές που χρησιμοποιήσαμε κατά τη ρύθμιση της ανίχνευσης.
Πρώτον, το xdebug γράφει το αρχείο καταγραφής προφίλ στον κατάλογο /tmp από προεπιλογή. Εάν χρησιμοποιείτε Windows, πρέπει να διορθώσετε το php.ini, ως εξής:
xdebug.profiler_output_dir="c:\traces"

Από προεπιλογή, το xdebug αντικαθιστά το υπάρχον αρχείο καταγραφής προφίλ. Μπορείτε να το ρυθμίσετε ώστε να συμπληρώνει το υπάρχον προσθέτοντας την ακόλουθη εντολή

στο php.ini. Υπάρχουν περιπτώσεις που δεν θέλετε να δημιουργήσετε ένα αρχείο καταγραφής προφίλ για όλα τα αρχεία, αλλά ταυτόχρονα η ενεργοποίηση του προφίλ κατά τη διάρκεια εκτέλεσης είναι προβληματική. Αντί να ενεργοποιείτε και να απενεργοποιείτε περιοδικά το προφίλ, προσθέστε την εντολή
xdebug.profiler_enable_trigger=Ενεργό

στο php.ini. Τώρα μπορείτε να ενεργοποιήσετε και να απενεργοποιήσετε τη δημιουργία προφίλ μεταβιβάζοντας μια ειδική παράμετρο GET ή POST XDEBUG_PROFILE σε ένα σενάριο PHP. Αυτό θα επιτρέψει τη δημιουργία προφίλ μόνο για αυτό το σενάριο PHP. Δεν είναι απαραίτητο να ορίσετε την τιμή αυτής της παραμέτρου, απλώς θυμηθείτε να προσθέσετε αυτήν την παράμετρο στη διεύθυνση test.php?XDEBUG_PROFILE.

Όνομα αρχείου καταγραφής προφίλ

Το όνομα που εκχωρεί το xdebug στο αρχείο καταγραφής προφίλ από προεπιλογή είναι "cachegrind.out". συν αναγνωριστικό διαδικασίας. Όπως και στην περίπτωση του αρχείου καταγραφής ίχνους, μπορείτε να αλλάξετε τα ονόματα του αρχείου καταγραφής προσθέτοντας τις κατάλληλες ρυθμίσεις στο php.ini. Όνομα παραμέτρου xdebug.profiler_output_name. Το όρισμα είναι μια συμβολοσειρά. που μπορεί να περιέχει διάφορους τροποποιητές. Τα πιο σημαντικά είναι τα παρακάτω:

  • %p – αναγνωριστικό διεργασίας
  • %r – τυχαίος αριθμός
  • %u - χρόνος
  • %H – τιμή $_SERVER["HTTP_HOST"]
  • %R – τιμή $_SERVER["REQUEST_URI"]
  • %s – όνομα συμπεριλαμβανομένης της πλήρους διαδρομής, οι κάθετες μετατρέπονται σε κάτω παύλες
Λάβετε υπόψη ότι ο τροποποιητής %s χρησιμοποιείται μόνο για το xdebug.profiler_output_name. Εάν θέλετε να μάθετε το όνομα του αρχείου καταγραφής προφίλ, μπορείτε να καλέσετε τη συνάρτηση xdebug_get_profiler_filename().

Ανάλυση ημερολογίου προφίλ
Όπως αναφέρθηκε παραπάνω, για την ανάλυση του αρχείου καταγραφής προφίλ, απαιτούνται πρόσθετα προγράμματα για οπτικοποίηση δεδομένων. Όλα τα αρχεία καταγραφής προφίλ που δημιουργεί το xdebug είναι σε μορφή παρόμοια με τη μορφή Cachegrind. Το Cachegrind είναι ένας προγραμματιστής προφίλ που αποτελεί μέρος ενός πιο ισχυρού προγράμματος που ονομάζεται Valgrind, ενός προγράμματος εντοπισμού σφαλμάτων και προφίλ λογισμικού για Linux. Το Cachegrind σχεδιάστηκε για να αναλύει στατιστικά στοιχεία κρυφής μνήμης, χρήση μνήμης και εντολές προγράμματος. Ένα άλλο εργαλείο Valgrind, το Callgrind, σχεδιάζει γραφήματα κλήσεων. Όσον αφορά την PHP, μπορούμε να χρησιμοποιήσουμε αυτήν την εφαρμογή για να οπτικοποιήσουμε και να αναλύσουμε το αρχείο καταγραφής προφίλ.
Το εργαλείο που χρησιμοποιείται συνήθως για την ανάλυση του αρχείου καταγραφής προφίλ που δημιουργείται από το xdebug ονομάζεται . Το KCachegrind είναι ελεύθερο λογισμικό με άδεια χρήσης σύμφωνα με την GPL (λειτουργεί μόνο σε συστήματα Unix). Ωστόσο, υπάρχει ένα απλό πρόγραμμα για Windows, το οποίο είναι επίσης δωρεάν. Ας δούμε πρώτα την έκδοση των Windows.

WinCacheGrind: ανάλυση των αρχείων καταγραφής προφίλ στα Windows

Η τρέχουσα έκδοση (τη στιγμή που γράφτηκε από τον συγγραφέα αυτού του άρθρου) του WinCachegrind είναι 1.0.0.12. Αυτή η έκδοση χρονολογείται από το 2005, πράγμα που σημαίνει ότι το WinCachegrind δεν έχει αναπτυχθεί εδώ και πολύ καιρό. Αν κοιτάξετε τις σημειώσεις έκδοσης, οι συγγραφείς γράφουν ότι το πρόγραμμα έχει σφάλματα που μερικές φορές το κάνουν να συμπεριφέρεται περίεργα.
Ως εκ τούτου, συνιστώ τη χρήση του KCachegrind, που ξεκίνησε με βάση μια εικονική μηχανή στην πιο πρόσφατη διανομή Linux, για παράδειγμα το Ubuntu (σημείωση του μεταφραστή, γενικά μιλώντας, μια περίεργη σύσταση· σε αυτήν την περίπτωση, θα συνιστούσα απλώς να εγκαταστήσετε το Linux και όχι να περιφράξετε ο κήπος των εικονικών μηχανών). Υπάρχει ένας τεράστιος αριθμός εικονικών μηχανών που διατίθενται στα Windows. Εάν δεν είναι δυνατή η χρήση Unix ή εικονικής μηχανής για κάποιο λόγο, μπορείτε να συνεχίσετε να χρησιμοποιείτε το WinCachegrind για απλή ανάλυση προφίλ καταγραφής. Το WinCachegrind δεν σχεδιάζει γραφήματα κλήσεων, σε αντίθεση με το KCachegrind.
Η εγκατάσταση του Wincachegrind είναι εξαιρετικά εύκολη. Εκτελέστε το πρόγραμμα εγκατάστασης, κάντε κλικ στο κουμπί για να αποδεχτείτε την άδεια χρήσης και η εγκατάσταση ολοκληρώθηκε. Τώρα μπορείτε να εκτελέσετε το πρόγραμμα και να ανοίξετε ένα από τα αρχεία καταγραφής προφίλ cachegrind που δημιουργήθηκε από το xdebug.

Κάνοντας κλικ στο ρολόι ή στο εικονίδιο σίγμα, μπορείτε να κάνετε εναλλαγή μεταξύ εμφάνισης πληροφοριών σε απόλυτες τιμές και ποσοστά. Η ένδειξη ποσοστού δείχνει πόσος χρόνος, ως ποσοστό του συνολικού χρόνου, χρειάζεται για να καλέσετε μια συνάρτηση σε ένα δεδομένο μπλοκ.
Δύο χρήσιμες ρυθμίσεις είναι το Profiler -> Hide Fast Functions και το Profiler -> Hide Library Functions. Ο πρώτος διακόπτης κρύβει συναρτήσεις των οποίων η συμβολή χρόνου στο συνολικό χρόνο εκτέλεσης του προγράμματος είναι ασήμαντη.
Η δεύτερη ρύθμιση, Profiler -> Hide Library Functions, αποκρύπτει λειτουργίες που είναι ενσωματωμένες στην PHP από τη γενική ανάλυση. Όταν και οι δύο αυτές ρυθμίσεις είναι ενεργοποιημένες, βλέπετε λιγότερα δεδομένα, επιτρέποντάς σας να εστιάσετε σε περιοχές του κώδικά σας που χρειάζονται βελτιστοποίηση.
Το κύριο παράθυρο περιέχει δύο καρτέλες: Γραμμή προς γραμμή και Συνολικά. Και οι δύο καρτέλες εμφανίζουν τις ίδιες πληροφορίες, αλλά η καρτέλα Συνολικά συγκεντρώνει τις πληροφορίες για καλύτερη παρουσίαση. Self time εμφανίζει το χρόνο εκτέλεσης του κώδικα στο τρέχον μπλοκ, ενώ ο αθροιστικός χρόνος (Cum.) δείχνει τον συνολικό χρόνο εκτέλεσης των συναρτήσεων στο συγκεκριμένο μπλοκ.

KCacheGrind: ανάλυση των αρχείων καταγραφής προφίλ στο Unix

Η έκδοση Unix του KCachegrind παρέχει περισσότερη λειτουργικότητα από το WinCachegrind. Το KCachegrind οπτικοποιεί τα δεδομένα και δημιουργεί ένα γράφημα κλήσης.
Για να ξεκινήσετε να το χρησιμοποιείτε, πρέπει να εγκαταστήσετε το KCachegrind. Τρέχουσα έκδοση . Μια νεότερη έκδοση (0.10.1) είναι διαθέσιμη, αλλά αποτελεί μέρος του πακέτου Valgrind.
Εάν είναι δυνατόν, χρησιμοποιήστε έναν διαχειριστή πακέτων για να εγκαταστήσετε το πακέτο KCachegrind. Το KCachegrind χρησιμοποιεί το GraphViz για να σχεδιάσει γραφήματα κλήσεων, επομένως πρέπει επίσης να εγκαταστήσετε το πακέτο GraphViz εάν ο διαχειριστής πακέτων δεν εγκαθιστά αυτόματα εξαρτημένα πακέτα.
Εάν δεν βρείτε το δυαδικό πακέτο KCachegrind, θα χρειαστεί να μεταγλωττίσετε μόνοι σας το KCachegrind. Αφού κάνετε λήψη των πηγών, εκτελέστε

./configure --prefix=/opt/kde3
φτιαχνω, κανω
κάντε εγκατάσταση

Όπως μπορείτε να σημειώσετε, πρέπει να καθορίσετε τη διαδρομή προς την τρέχουσα εγκατάσταση της βιβλιοθήκης του KDE. Εάν δεν γνωρίζετε πού βρίσκονται οι βιβλιοθήκες του KDE στο σύστημά σας, χρησιμοποιήστε το

για να εμφανίσετε τη διαδρομή προς τις βιβλιοθήκες του KDE.
Μόλις εγκατασταθεί, μπορείτε να εκτελέσετε το KCacheGrind από τη γραμμή εντολών

Η εμφάνιση σε πίνακα των δεδομένων στο KCachegrind είναι πολύ παρόμοια με το WinCachegrind. Μπορείτε επίσης να κάνετε εναλλαγή μεταξύ απόλυτων και ποσοστιαίων τιμών. Ορισμένες δυνατότητες του KCachegrind δεν έχουν σχεδιαστεί για PHP. Η παρακάτω εικόνα δείχνει το γράφημα κλήσης του προγράμματος phpMyAdmin:


Όπως μπορείτε να δείτε, το μεγαλύτερο μέρος του χρόνου εκκίνησης ξοδεύτηκε στο common.inc.php. Το ακόλουθο στιγμιότυπο οθόνης δείχνει μια απεικόνιση των κλήσεων συναρτήσεων μέσα στο common.inc.php:

Αυτό το μπλοκ κώδικα εκτελεί δύο require_onces, που είναι ο μισός χρόνος που χρειάζεται για να τρέξει το common.inc.php. Κάνοντας διπλό κλικ σε οποιοδήποτε ορθογώνιο θα μεταφερθείτε βαθύτερα στην ανάλυση δεδομένων.

Βελτιστοποίηση κώδικα με βάση δεδομένα προφίλ

Πάντα να δημιουργείτε προφίλ στις εφαρμογές σας πριν από τη βελτιστοποίηση. Μπορείτε να ξεκινήσετε τη βελτιστοποίηση μόνοι σας, εκεί που σας φαίνεται ότι αυτή η βελτιστοποίηση θα έχει αποτέλεσμα, αλλά αυτό δεν ισχύει πάντα. Η βελτιστοποίηση έχει κυρίως αποτέλεσμα μόνο σε εκείνα τα μέρη που καταλαμβάνουν τον περισσότερο χρόνο στη διαδικασία εκτέλεσης.
Εάν εκτελείτε πολλά αντίγραφα ενός προγράμματος ταυτόχρονα, ίσως χρειαστεί να βελτιστοποιήσετε το τμήμα του προγράμματός σας που καταλαμβάνει το μεγαλύτερο μέρος του χρόνου εκτέλεσης. Σε αυτήν την περίπτωση, η βελτιστοποίηση δεν θα κάνει την εξυπηρέτηση ενός μεμονωμένου αιτήματος πιο γρήγορη, αλλά θα επιτρέψει στον διακομιστή σας να χειρίζεται υψηλά φορτία ενώ θα καταναλώνει λιγότερους πόρους για την εξυπηρέτηση αυτών των αιτημάτων.
Όταν εξετάζετε τις διάρκειες εκτέλεσης του προγράμματος προφίλ, έχετε κατά νου ότι οι απόλυτες τιμές είναι λιγότερο σημαντικές από τις σχετικές τιμές. Μετρημένες σε διαφορετικά συστήματα, οι απόλυτες τιμές μπορεί να διαφέρουν. Ωστόσο, προτού ξεκινήσετε τη βελτιστοποίηση του κώδικά σας, λάβετε υπόψη τα ακόλουθα πράγματα.
Ένας σημαντικός κανόνας στη βελτιστοποίηση είναι η μείωση του αριθμού των λειτουργιών I/O. Ορισμένες λειτουργίες εισόδου/εξόδου είναι πολύ χρονοβόρες σε σύγκριση με τους υπολογισμούς. Η μείωση τέτοιων λειτουργιών μπορεί να είναι ένας πολύ αποτελεσματικός τρόπος για να επιταχύνετε το πρόγραμμά σας. Η κατάργηση μιας κλήσης I/O μπορεί να προσφέρει μια πιο αποτελεσματική βελτίωση από το να ξοδεύετε πολλές ώρες για τη βελτιστοποίηση του κώδικα. Επομένως, θα πρέπει πρώτα να εστιάσετε στις λειτουργίες I/O πριν ξεκινήσετε την κωδικοποίηση.
Μπορείτε επίσης να αυξήσετε τον αριθμό των διακομιστών σας πριν από τη βελτιστοποίηση. Μπορείτε να αγοράσετε ένα τεράστιο, το οποίο θα σας δώσει μια μικρή αύξηση στην παραγωγικότητα. Ο χρόνος ανάπτυξης είναι πιο ακριβός από την τιμή ενός νέου διακομιστή. Και αν αυξήσετε την ποσότητα του υλικού, μπορείτε να είστε σίγουροι ότι θα λάβετε την αύξηση αμέσως χωρίς καμία επίδραση στον κώδικα PHP. Όταν ένας προγραμματιστής ξοδεύει μία ή δύο ημέρες βελτιστοποιώντας τον κώδικα, δεν μπορείτε ποτέ να πείτε πόσο θα αυξηθεί η παραγωγικότητα. Και στο τέλος, δεν μπορείτε πλέον να είστε σίγουροι ότι η βελτιστοποίηση δεν θα επιφέρει σφάλματα.
Η μετατροπή ορισμένων σελίδων σε στατικές σελίδες είναι ένας τρόπος για να επιτύχετε καλύτερη απόδοση. Ας υποθέσουμε ότι υπάρχει ένας ιστότοπος με μεγάλη επισκεψιμότητα, όπου ένα σενάριο PHP δημιουργεί την πρώτη σελίδα για κάθε αίτημα, επιλέγοντας πληροφορίες από μια βάση δεδομένων ή ένα αρχείο XML. Εάν τα δεδομένα σε μια σελίδα αλλάζουν αρκετά συχνά, μπορείτε να δημιουργήσετε ξανά ένα στατικό αντίγραφό της. Εάν η μετατροπή σε στατική προβολή δεν είναι δυνατή για μια σελίδα (κάποια προσωπικά στοιχεία εμφανίζονται στη σελίδα), μπορείτε να μετατρέψετε ορισμένα μπλοκ σε στατική προβολή.
Ένα άλλο επίπεδο βελτιστοποίησης δεν απαιτεί αλλαγή του κώδικα PHP. Όπως γνωρίζουμε η PHP είναι μια διερμηνευμένη γλώσσα. Αυτό σημαίνει ότι οι εντολές του μεταφράζονται κατά το χρόνο εκτέλεσης σε ενδιάμεσο κώδικα. Η μετάδοση επαναλαμβάνεται κάθε φορά που εκτελείται το σενάριο. Αυτό κάνει την PHP πιο αργή σε σύγκριση με γλώσσες όπως η C ή η Java, οι οποίες δεν απαιτούν ανάλυση του κώδικα κάθε φορά που τον εκτελείτε. Για την PHP, μπορείτε να χρησιμοποιήσετε κρυφές μνήμες ενδιάμεσης αναπαράστασης (δείτε τη μετάφρασή μου...) για να αποθηκεύσετε και να επαναχρησιμοποιήσετε τον ενδιάμεσο κώδικα, κάτι που κάνει την εκκίνηση και την εκτέλεση πιο γρήγορη.
Όλα αυτά δεν σημαίνουν ότι δεν είναι η ώρα ή το μέρος για να βελτιστοποιήσετε τον κώδικα PHP. Ορισμένες βελτιστοποιήσεις κώδικα μπορούν να βελτιώσουν σημαντικά την απόδοση. Ωστόσο, να θυμάστε πάντα ότι η αλλαγή κώδικα ενέχει πάντα τον κίνδυνο εισαγωγής πρόσθετων σφαλμάτων και ζητημάτων ασφαλείας. Θυμηθείτε επίσης ότι η βελτιστοποίηση του κώδικα σας τον κάνει λιγότερο ευανάγνωστο.

συμπέρασμα

Η δημιουργία και η οπτικοποίηση ενός αρχείου καταγραφής προφίλ είναι μία από τις σημαντικές προϋποθέσεις για τη βελτιστοποίηση του κώδικα PHP. Πρέπει να γνωρίζετε ποια μέρη στο πρόγραμμα χρειάζονται περισσότερο χρόνο και από εκεί θα πρέπει να ξεκινήσετε τη βελτιστοποίηση.
Στο επόμενο άρθρο θα δούμε τον εντοπισμό σφαλμάτων χρησιμοποιώντας το xdebug. Το xdebug μπορεί να σας προσφέρει τη δυνατότητα να κάνετε απομακρυσμένο εντοπισμό σφαλμάτων. Χρησιμοποιώντας έναν υπολογιστή-πελάτη που έχει αυτή τη δυνατότητα, όπως το Eclipse PDT, μπορείτε να διορθώσετε τον κώδικά σας χωρίς να τον αλλάξετε, να ορίσετε σημεία διακοπής, να μεταβείτε σε ενότητες κώδικα και να δείτε πώς και πού αλλάζουν τιμές οι μεταβλητές.

Τελευταία ενημέρωση: 01/12/2019

Δημοσίευση: 01/09/2016


Χρησιμοποιώντας το PhpStorm, μπορείτε να αναλύσετε την απόδοση του κώδικα PHP σας δημιουργώντας το προφίλ. Το προφίλ θα σας επιτρέψει να συλλέξετε στατιστικά στοιχεία εκτέλεσης προγράμματος: τα ονόματα των συναρτήσεων που εκτελέστηκαν, πόσες φορές εκτελέστηκε κάθε συνάρτηση, ο χρόνος εκτέλεσης κάθε συνάρτησης, ποιες άλλες συναρτήσεις κλήθηκαν σε κάθε συνάρτηση και ούτω καθεξής.

Αυτές οι πληροφορίες μπορούν να σας δώσουν συμβουλές σχετικά με το πού μπορεί να βελτιωθεί ο κώδικάς σας.

Ας δούμε πώς λειτουργεί.

1. Προαπαιτούμενα

Το PhpStorm IDE μπορεί να χρησιμοποιήσει πληροφορίες προφίλ που συλλέγονται χρησιμοποιώντας το εργαλείο Xdebug. Αυτή η επέκταση πρέπει να εγκατασταθεί και να ρυθμιστεί στο σύστημά σας. Για περισσότερες πληροφορίες, ανατρέξτε στον Οδηγό εγκατάστασης Xdebug.

Εάν είστε χρήστης της υπέροχης φορητής πλατφόρμας διακομιστή και του περιβάλλοντος λογισμικού Open Server, τότε δεν χρειάζεται να κάνετε τίποτα - η επέκταση Xdebug είναι ήδη εγκατεστημένη και συνδεδεμένη.

Προσοχή

Το Xdebug δεν είναι συμβατό με το IonCube. Το IonCube είναι ένα εργαλείο (βοηθητικά προγράμματα) για την προστασία λογισμικού γραμμένου στη γλώσσα προγραμματισμού PHP. Απενεργοποιήστε πλήρως την επέκταση IonCube ή ενώ χρησιμοποιείτε το Xdebug. Ένα άλλο πιθανό πρόβλημα θα μπορούσε να είναι ότι το Xdebug έχει ρυθμιστεί από προεπιλογή στη θύρα 9000, η ​​οποία είναι η ίδια θύρα που χρησιμοποιείται από τον Open Server. Για να λύσετε αυτό το πρόβλημα, σε μία από τις περιπτώσεις θα πρέπει να αλλάξετε τον αριθμό θύρας.

Όλες οι ενέργειες που περιγράφονται εδώ αναπαράχθηκαν με τα σωστά αναμενόμενα αποτελέσματα στο ακόλουθο τεχνολογικό περιβάλλον:

2. Ενεργοποίηση του προγράμματος προφίλ Xdebug

Το προφίλ προσθέτει κάποια επιβάρυνση στην εκτέλεση της εφαρμογής και δημιουργεί έναν τεράστιο όγκο πληροφοριών δίσκου. Ως εκ τούτου, είναι καλύτερο να ενεργοποιείτε το Xdebug profiler μόνο όταν είναι απαραίτητο και να το απενεργοποιείτε υπό κανονικές συνθήκες.

Το Xdebug ρυθμίζεται μέσω οδηγιών στο ενεργό αρχείο php.ini. Κάθε φορά που ενεργοποιείτε το προφίλ, πρέπει να διαμορφώσετε την ακόλουθη οδηγία:

xdebug.profiler_output_dir = /path/to/store/snapshots

Η τιμή της οδηγίας πρέπει να προσδιορίζει τη διαδρομή που θα χρησιμοποιηθεί για την αποθήκευση αρχείων προφίλ.

2.1. Παγκοσμίως

Για να ενεργοποιήσετε το πρόγραμμα προφίλ Xdebug παγκοσμίως, πρέπει να χρησιμοποιήσετε την ακόλουθη οδηγία:

xdebug.profiler_enable = 1

Με αυτόν τον τρόπο, το προφίλ θα εκτελείται κάθε φορά που εκτελείται οποιοδήποτε σενάριο. Είναι βολικό να χρησιμοποιήσετε αυτήν την επιλογή για την ενεργοποίηση του προφίλ μόνο σε σπάνιες περιπτώσεις.

2.2. Χρήση πρόσθετων επιλογών διερμηνέα

Μπορείτε να ενεργοποιήσετε το προφίλτρο χρησιμοποιώντας πρόσθετες παραμέτρους διερμηνέα στο παράθυρο Διαμορφώσεις Εκτέλεση/Εντοπισμός σφαλμάτων. Για να το ανοίξετε, χρησιμοποιήστε τα ακόλουθα στοιχεία στο κύριο μενού IDE:

Η επιλογή (επισημασμένη με κόκκινο περίγραμμα στο παραπάνω στιγμιότυπο οθόνης) Επιλογές διερμηνέα (επιλογές διερμηνέα) ενότητα Γραμμή εντολών (γραμμή εντολών) πρέπει να περιέχει την ακόλουθη γραμμή:

D xdebug.profiler_enable = 1

Αυτή η επιλογή θα σας επιτρέψει να χρησιμοποιήσετε το προφίλ για μια συγκεκριμένη διαμόρφωση και όχι σε παγκόσμια κλίμακα.

2.3. Χρήση ειδικών παραμέτρων GET/POST ή αρχείου cookie

Για πιο ελεγχόμενο προφίλ, θα πρέπει να χρησιμοποιείται η ακόλουθη οδηγία:

xdebug.profiler_enable_trigger = 1

Εάν η τιμή της οδηγίας οριστεί σε 1, τότε κατά την εκτέλεση μιας δέσμης ενεργειών με παράμετρο GET/POST ή cookie με το όνομα XDEBUG_PROFILE, η δημιουργία προφίλ θα εκτελείται ανεξάρτητα από τη ρύθμιση xdebug.profiler_enable.

Αυτή η επιλογή για την ενεργοποίηση του προφίλ είναι η πιο δημοφιλής.

3. Συλλογή αρχείων καταγραφής προφίλ

Για να μπορέσετε να αναλύσετε τα αρχεία καταγραφής προφίλ, πρέπει πρώτα να συλλεχθούν.

3.1. Συλλογή αρχείων καταγραφής προφίλ για εφαρμογές web

Για να δημιουργήσετε προφίλ σε εφαρμογές Ιστού, χρησιμοποιήστε το πρόγραμμα προφίλ Xdebug παγκοσμίως ή ξεκινήστε και σταματήστε το κατά παραγγελία. Αφού ενεργοποιήσετε το προφίλ, ανοίξτε την εφαρμογή στο πρόγραμμα περιήγησης για να ξεκινήσετε τη συλλογή δεδομένων - καταγραφής προφίλ.

Κατά την ανάλυση ζητημάτων απόδοσης, η χρήση σελιδοδεικτών ή επεκτάσεων προγράμματος περιήγησης για εντοπισμό σφαλμάτων είναι μια πολύ καλή προσέγγιση, καθώς σας επιτρέπει να περιηγηθείτε στην εφαρμογή και να εκκινήσετε το προφίλ μόνο όταν εντοπιστεί πρόβλημα απόδοσης. Αυτό σας επιτρέπει να συλλέγετε στοχευμένα αρχεία καταγραφής προφίλ.

3.2. Συλλογή αρχείων καταγραφής προφίλ για εφαρμογές CLI και δοκιμές μονάδων

Για να δημιουργήσετε προφίλ εφαρμογών CLI και δοκιμές μονάδων, χρησιμοποιήστε το πρόγραμμα προφίλ Xdebug καθολικά ή δημιουργήστε μια ξεχωριστή ρύθμιση παραμέτρων εκτέλεσης για να ενεργοποιήσετε το πρόγραμμα προφίλ χρησιμοποιώντας το παράθυρο Διαμορφώσεις Εκτέλεση/Εντοπισμός σφαλμάτων. Στη συνέχεια, εκτελέστε την εφαρμογή CLI ή δοκιμές μονάδας για τη συλλογή δεδομένων προφίλ.

Κατά την ανάλυση προβλημάτων απόδοσης σε δοκιμές μονάδων, μια καλή προσέγγιση είναι να δημιουργήσετε μια ξεχωριστή διαμόρφωση για την εκτέλεση μόνο εκείνων των δοκιμών μονάδας για τις οποίες υπάρχουν υποψίες ότι έχουν προβλήματα απόδοσης. Αυτό σας επιτρέπει να συλλέγετε στοχευμένα αρχεία καταγραφής προφίλ.

4. Ανάλυση της περιγραφής καταγραφής προφίλ

Ας ρίξουμε μια πιο προσεκτική ματιά στο αρχείο καταγραφής προφίλ.

4.1. Άνοιγμα του αρχείου καταγραφής προφίλ

Για να ανοίξετε το αρχείο καταγραφής προφίλ, χρησιμοποιήστε τα ακόλουθα στοιχεία στο κύριο μενού IDE: .

Εάν είστε χρήστης της υπέροχης φορητής πλατφόρμας διακομιστή Open Server, τότε μπορείτε επίσης να χρησιμοποιήσετε το εργαλείο πολλαπλών πλατφορμών Webgrind για να προβάλετε το αρχείο καταγραφής προφίλ. Μπορείτε να το βρείτε μέσω των παρακάτω στοιχείων του κύριου μενού Open Server [Για προχωρημένους → Προφίλ PHP].

Τα αρχεία καταγραφής προφίλ αποθηκεύονται σε έναν φάκελο σύμφωνα με τη ρυθμισμένη οδηγία xdebug.profiler_output_dir. Το όνομα αρχείου που δημιουργείται ξεκινά πάντα με cachegrind.out. και τελειώνει είτε με το αναγνωριστικό διεργασίας PHP ή διακομιστή ιστού είτε με τον κατακερματισμό crc32 του καταλόγου στον οποίο βρίσκεται το σενάριο με προφίλ.


4.2. Καρτέλα Στατιστικά Εκτέλεσης

Στην καρτέλα "Στατιστικά στοιχεία εκτέλεσης", μπορείτε να εξετάσετε συνοπτικές πληροφορίες σχετικά με τις μετρήσεις εκτέλεσης κάθε καλούμενης συνάρτησης. Μπορείτε να δείτε όλα τα αρχεία, τις κλήσεις συναρτήσεων, πόσες φορές κλήθηκαν και τον χρόνο εκτέλεσης (απόλυτο και σχετικό) κάθε συνάρτησης.

Το επάνω πλέγμα εμφανίζει διάφορες μετρήσεις:

  • Ίδιος χρόνος - ο χρόνος που αφιερώνει μια συνάρτηση για την εκτέλεση του κώδικά της (χωρίς να λαμβάνονται υπόψη οι κλήσεις προς άλλες λειτουργίες).

Το κάτω πλέγμα εμφανίζει δύο καρτέλες: Callees - τις λειτουργίες που καλεί το σενάριο εδώ και Callers - από όπου κλήθηκε το σενάριο. Μπορείτε να δείτε διάφορες μετρήσεις εδώ:

  • Χρόνος - συνολικός χρόνος εκτέλεσης.
  • Κλήσεις - αριθμός κλήσεων.

Λειτουργίες με μεγάλο χρόνο εκτέλεσης ή μεγάλο αριθμό κλήσεων απαιτούν σίγουρα δοκιμή.

4.3. Καρτέλα κλήσης δέντρου

Η καρτέλα Call Tree εμφανίζει τις διαδρομές εκτέλεσης του κώδικά σας. Εδώ μπορείτε να δείτε πιο αναλυτικές πληροφορίες σχετικά με το χρόνο εκτέλεσης κάθε συνάρτησης και ούτω καθεξής.

Το επάνω πλέγμα εμφανίζει δέντρα κλήσεων (οι οποίες συναρτήσεις καλούνται σε άλλες συναρτήσεις) και άλλες μετρήσεις:

  • Callable (καλούμενο αρχείο) - το αρχείο που εκτελέστηκε.
  • Χρόνος - συνολικός χρόνος εκτέλεσης.
  • Κλήσεις - αριθμός κλήσεων.

Το κάτω πλέγμα εμφανίζει δύο καρτέλες: Callees - συναρτήσεις που καλούνται εδώ και Callers - από όπου καλείται η συνάρτηση. Μπορείτε να δείτε διάφορες μετρήσεις εδώ:

  • Callable (που ονομάζεται συνάρτηση) - μια συνάρτηση που έχει εκτελεστεί.
  • Χρόνος - συνολικός χρόνος εκτέλεσης.
  • Κλήσεις - αριθμός κλήσεων.

Ερωτήσεις ελέγχου

  1. Γιατί οι εφαρμογές PHP έχουν προφίλ;
  2. Πόσοι κύριοι τρόποι υπάρχουν για να ενεργοποιήσετε το πρόγραμμα προφίλ Xdebug;
  3. Ποιος είναι ο καλύτερος τρόπος να προχωρήσετε κατά τη δημιουργία προφίλ εφαρμογών CLI και δοκιμών μονάδων;
  4. Ποια εργαλεία μπορούν να χρησιμοποιηθούν για την ανάλυση των αρχείων καταγραφής προφίλ;
  5. Κατά την ανάλυση ενός αρχείου καταγραφής προφίλ, ποιες μετρήσεις πρέπει να προσέξετε πρώτα;

Το προφίλ εφαρμογής είναι η συλλογή δεδομένων σχετικά με την ταχύτητα εκτέλεσης διαφόρων ενοτήτων προγράμματος (αρχεία και συναρτήσεις). Υπάρχουν πολλά διαθέσιμα εργαλεία διαμόρφωσης προφίλ PHP, αλλά δεν είναι όλα τα εργαλεία κατάλληλα για την εκτέλεση ανάλυσης απευθείας στην παραγωγή.

XHProf- ένα πολύ απλό πρόγραμμα προφίλ που συλλέγει στατιστικά άμεσα ενώ η εφαρμογή εκτελείται χωρίς σχεδόν κανένα κόστος.

Γιατί προφίλ;

Εάν μια εφαρμογή αρχίσει να εκτελείται αργά, η δημιουργία προφίλ μπορεί να σας βοηθήσει να μάθετε ποιο τμήμα είναι αργό. Το αποτέλεσμα της δημιουργίας προφίλ είναι συνήθως μια λίστα εκτελεσμένων συναρτήσεων και ο χρόνος εκτέλεσής τους.

Το προφίλ πρέπει να γίνεται πριν από οποιαδήποτε βελτιστοποίηση εφαρμογής. Διαφορετικά, θα καθοδηγηθείτε από εικασίες. Πιθανότατα λάθος.

Πρόβλημα Xdebug

Το Xdebug είναι μια ισχυρή λύση για την PHP. Αλλά η ίδια η πλατφόρμα Xdebug είναι τόσο βαριά που δεν μπορεί να χρησιμοποιηθεί σε ζωντανούς ιστότοπους. Το XDebug δημιουργεί σημαντικό φόρτο στους πόρους του διακομιστή και επιβραδύνει την εφαρμογή.

Από την άλλη πλευρά, τα προβλήματα σε μια ζωντανή τοποθεσία μπορεί να είναι εντελώς διαφορετικά από αυτά σε ένα περιβάλλον ανάπτυξης. Η δημιουργία προφίλ μόνο σε υπολογιστές προγραμματιστών θα εμφανίσει μόνο ένα μέρος των προβλημάτων.

Γι' αυτό αναπτύχθηκε η λύση XHprof. Προορίζεται για χρήση σε εφαρμογές που εκτελούνται. Η κύρια ιδέα αυτού του προγράμματος προφίλ είναι να δημιουργήσει ένα ελάχιστο φορτίο στην εφαρμογή συλλέγοντας ταυτόχρονα όλα τα απαραίτητα δεδομένα για την ταχύτητα λειτουργίας. Η λύση αναπτύχθηκε από τα παιδιά από το Facebook και υποστηρίζεται από νέες εκδόσεις της PHP.

XHProf

Εγκατάσταση

Στο Debian, το XHprof είναι σε πακέτα sid, οπότε: apt-get εγκαταστήστε το xhprof

Μπορείτε επίσης να φτιάξετε μόνοι σας το XHprof.

Ενεργοποίηση προφίλ

Ας υποθέσουμε ότι έχουμε ένα σενάριο με τον ακόλουθο κώδικα:

εκτέλεση();

Ας πραγματοποιήσουμε τη δημιουργία προφίλ χρησιμοποιώντας το XHprof. Για να το κάνετε αυτό σε αυτή τη σελίδα χρειάζεστε:

  1. Ενεργοποιήστε το profiler από την αρχή.
  2. Στο τέλος του προγράμματος, σταματήστε το προφίλ και αποθηκεύστε τα ληφθέντα δεδομένα.

Θα μοιάζει με αυτό:

# Αρχικοποιήστε το προφίλxhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY); # Εκτελέστε το πρόγραμμα αφού ενεργοποιήσετε το προφίλεκτέλεση(); # Διακόψτε το προφίλ μετά την εκτέλεση του προγράμματος$xhprof_data = xhprof_disable();

# Αποθηκεύστε το αποτέλεσμα δημιουργίας προφίλ στη μεταβλητή $xhprof_data

  • Λειτουργία xhprof_enable()παίρνει σημαίες ως επιχειρήματα. XHPROF_FLAGS_CPU για καταγραφή στατιστικών στοιχείων επεξεργαστή, XHPROF_FLAGS_MEMORY για μνήμη, XHPROF_FLAGS_NO_BUILTINS για παράβλεψη ενσωματωμένων λειτουργιών.
  • xhprof_disable()θα απενεργοποιήσει το προφίλ και θα επιστρέψει τα συλλεγμένα στατιστικά στοιχεία.

Αναφορές

Γενιά

Τα δεδομένα που συλλέγονται μπορούν να αναλυθούν στη διεπαφή XHprof για τη δημιουργία αναφορών. Για να το κάνετε αυτό, πρέπει να κάνετε λήψη των πηγών XHprof: cd /var/www; wget http://pecl.php.net/get/xhprof-0.9.4.tgz gzip -d xhprof-0.9.4.tgz tar -xvf xhprof-0.9.4.tar

Μετά από αυτό, πρέπει να κάνετε αλλαγές στο σενάριο:

include_once "/var/www/xhprof-0.9.4/xhprof_lib/utils/xhprof_lib.php"; include_once "/var/www/xhprof-0.9.4/xhprof_lib/utils/xhprof_runs.php"; $xhprof_runs = νέο XHProfRuns_Default(); $run_id = $xhprof_runs->save_run($xhprof_data, "test");

# Ο νέος κώδικας αποθηκεύει την αναφορά για χρήση στο GUI

Διεπαφή για αναφορές

Για να δείτε την αναφορά, πρέπει να διαμορφώσετε τον εικονικό κεντρικό υπολογιστή στο φάκελο /var/www/xhprof-0.9.4/xhprof_html. Για παράδειγμα, στο Nginx:

Διακομιστής ( όνομα_διακομιστή xh..9.4/xhprof_html; ευρετήριο. -s reload

Μετά από αυτό, θα εμφανιστεί μια λίστα αναφορών:

Ο πίνακας περιέχει μια λίστα λειτουργιών που εκτελέστηκαν σε μία σελίδα με πρόσθετες πληροφορίες:

  • Κλήσεις — αριθμός και ποσοστό κλήσεων λειτουργίας.
  • Συμπ. Wall Time — χρόνος εκτέλεσης μιας συνάρτησης με ένθετες συναρτήσεις.
  • Εξαιρ. Wall Time είναι ο χρόνος εκτέλεσης μιας συνάρτησης χωρίς ένθετες συναρτήσεις.
  • Συμπ. CPU - χρόνος επεξεργαστή με ένθετες λειτουργίες.
  • Εξαιρ. CPU - χρόνος επεξεργαστή χωρίς ένθετες λειτουργίες.
  • Συμπ. MemUse - κατανάλωση μνήμης με ένθετες λειτουργίες.
  • Εξαιρ. MemUse - κατανάλωση μνήμης χωρίς ένθετες λειτουργίες.
  • Συμπ. PeakMemUse - μέγιστη κατανάλωση μνήμης με ένθετες λειτουργίες.
  • Εξαιρ. PeakMemUse - μέγιστη κατανάλωση μνήμης χωρίς ένθετες λειτουργίες.

Γραφικές αναφορές

Για να δημιουργήσετε μια γραφική αναφορά, βεβαιωθείτε ότι έχετε εγκαταστήσει το graphviz: apt-get install graphviz

Οι ενότητες του κώδικα που απαιτούν πόρους επισημαίνονται με κίτρινο (μεσαίο) και κόκκινο (πιο βαρύ). Αυτά είναι εκείνα τα τμήματα κώδικα που χρησιμοποιούν πολλούς πόρους σε σχέση με το υπόλοιπο πρόγραμμα. Αυτή θα μπορούσε να είναι μια αργή λειτουργία ή πολλές κλήσεις σε μια γρήγορη λειτουργία. Στο παράδειγμά μας, η συνάρτηση str_replace()σημειώθηκε με κόκκινο χρώμα λόγω 262 κλήσεων.

Συγκεντρωτικές αναφορές

Η διεπαφή XHprof σάς επιτρέπει επίσης να προβάλλετε συγκεντρωτικές πληροφορίες από πολλές αναφορές ταυτόχρονα. Για να γίνει αυτό, το run_id περνάει χωρισμένο με κόμμα: http://xh..php?run= 53a894f6d5d9b,53a894fcf126e&πηγή=δοκιμή

TL;DR

Χρησιμοποιήστε το XHprof για το προφίλ της PHP απευθείας στην παραγωγή.

Εγκατάσταση του xhprof για php:

Το Sudo apt-get εγκαταστήστε το php5-xhprof

Επανεκκινήστε τον Apache:

Επανεκκίνηση της υπηρεσίας Sudo apache2

Εκτύπωση phpinfo(); και ελέγξτε αν η μονάδα είναι συνδεδεμένη ή όχι;

Ελέγχουμε το /etc/php5/apache2/conf.d για να δούμε αν εμφανίζεται εκεί ένας σύνδεσμος προς τη διαμόρφωση xhprof.ini.

Αν όχι, τότε δημιουργήστε μόνοι σας τον σύνδεσμο και επανεκκινήστε τον Apache.

Sudo ln -s /etc/php5/mods-available/xhprof.ini /etc/php5/apache2/conf.d/20-xhprof.ini επανεκκίνηση της υπηρεσίας sudo apache2

Ελέγχουμε τη σύνδεση xhprof, ελέγχουμε αν είναι συνδεδεμένο το 20-xhprof.ini:

Το στιγμιότυπο οθόνης δείχνει την έκδοση 0.9.2, αν και κατά την εγκατάσταση εμφανίστηκε η έκδοση 0.9.4, αλλά αυτό δεν αποτελεί εμπόδιο για εμάς.

Τώρα μπορούμε να προφίλ τον κώδικα μας.

  1. Στην αρχή της σελίδας, ενεργοποιήστε το προφίλ χρησιμοποιώντας xhprof_enable();
  2. Στο τέλος της σελίδας, απενεργοποιήστε τη δημιουργία προφίλ χρησιμοποιώντας το xhprof_disable() και αποθηκεύστε τα δεδομένα που συλλέγονται χρησιμοποιώντας το save_run();
  3. Στη συνέχεια αναλύουμε.

Λειτουργία xhprof_enable()παίρνει σημαίες ως ορίσματα:

XHPROF_FLAGS_CPU για καταγραφή στατιστικών στοιχείων επεξεργαστή,

XHPROF_FLAGS_MEMORY - για μνήμη,

XHPROF_FLAGS_NO_BUILTINS - για να αγνοήσετε τις ενσωματωμένες λειτουργίες.

Για αποθήκευση και περαιτέρω ενημέρωση, πρέπει να εγκαταστήσουμε ένα εργαλείο ανάλυσης προφίλ.

Κατεβάστε το αρχείο με το εργαλείο ανάλυσης από τη σελίδα xhprof:, λάβετε την έκδοση 0.9.4.

Στον διακομιστή ή στον τοπικό υπολογιστή, δημιουργήστε έναν φάκελο προσβάσιμο μέσω του localhost ή ενός ξεχωριστού τομέα στον οποίο αποσυμπιέζουμε το αρχείο που κατεβάσατε:

Τώρα μπορούμε να αποθηκεύσουμε το προφίλ.

https://xn--d1acnqm.xn--j1amh/altadmin/posts/edit/188

Ο κώδικας παρακολούθησης μοιάζει κάπως έτσι:

// Αρχικοποίηση του προφίλ - θα μετρήσουμε τόσο τον χρόνο του επεξεργαστή όσο και την κατανάλωση μνήμης xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
// Κωδικός προφίλ # Διακοπή του προφίλτρου $xhprof_data = xhprof_disable(); # Αποθηκεύστε την αναφορά και δημιουργήστε έναν σύνδεσμο για να την προβάλετε include_once "/var/www/html/xhprof-0.9.4/xhprof_lib/utils/xhprof_lib.php"; include_once "/var/www/html/xhprof-0.9.4/xhprof_lib/utils/xhprof_runs.php"; $xhprof_runs = νέο XHProfRuns_Default(); $run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_test"); echo "Αναφορά: http://localhost/xhprof-0.9.4/xhprof_html/index.php?run=$run_id&source=xhprof_test"; ηχώ "\n";

/var/www/html/xhprof-0.9.4 - η διαδρομή προς το φάκελο όπου αποσυμπιέσαμε τις βιβλιοθήκες που χρειαζόμαστε.

Αναφορά: http://localhost/xhprof-0.9.4/xhprof_html/index.php?run=57c32f3095d21&source=xhprof_test

Έτσι φαίνεται μια ανάλυση προφίλ. Αυτός ο πίνακας εμφανίζει όλες τις κλήσεις λειτουργιών που έχουν προφίλ.

Μπορούμε να ταξινομήσουμε τις συναρτήσεις κάνοντας κλικ στις επικεφαλίδες του πίνακα.

Όταν βλέπουμε ότι κάποια συνάρτηση εκτελείται είτε πολλές φορές είτε για πολύ μεγάλο χρονικό διάστημα, μπορούμε να κάνουμε κλικ σε αυτή τη συνάρτηση και θα ανοίξει ένας παρόμοιος πίνακας αλλά με εσωτερικές κλήσεις μέσα στη συγκεκριμένη συνάρτηση και στο γονικό περιβάλλον όπου κλήθηκε η συνάρτηση.

Δείκτες:
Total Inc. Wall Time (χρόνος που δαπανάται για την εκτέλεση λειτουργιών, λαμβάνοντας υπόψη την αναμονή για απαντήσεις από πρίζες, σύστημα αρχείων και άλλους πόρους)
Total Inc. CPU (χρόνος που δαπανάται για την εκτέλεση λειτουργιών)
Total Inc. MemUse (χρήση μνήμης)
Total Inc. PeakMemUse (μέγιστη χρήση μνήμης)
Αριθμός κλήσεων συναρτήσεων

Υπάρχει επίσης η επιλογή της γραφικής εμφάνισης της αναφοράς. Αλλά για να το κάνετε αυτό, πρέπει να βεβαιωθείτε ότι έχετε εγκαταστήσει τη βιβλιοθήκη graphviz:

Apt-get εγκαταστήστε το graphviz

Στη συνέχεια, στο προφίλ σας πρέπει να κάνετε κλικ για εμφάνιση και voila:

Τώρα μπορείτε να αναλύσετε και να βελτιώσετε τον κώδικα.

Προφίλ κώδικα PHP

Αργά ή γρήγορα, ο καθένας από εμάς αντιμετωπίζει τον κώδικα παλαιού τύπου και τη βελτιστοποίησή του. Σε μια τέτοια κατάσταση, ένας εντοπιστής σφαλμάτων και ένας προγραμματιστής προφίλ είναι οι καλύτεροι βοηθοί του προγραμματιστή. Για όσους εργάζονται με PHP, χάρη στον Derick Rethans, υπάρχει ένα καλό εργαλείο - το xDebug. Υπάρχουν πολλές πληροφορίες σχετικά με το xDebug ακόμη και στο RuNet, επομένως αυτό το άρθρο δεν θα αφορά αυτό.

Όταν έπεσα πάνω σε μια αναφορά για ένα προφίλ για PHP, σκέφτηκα αμέσως το xDebug (είχα ξεχάσει εδώ και πολύ καιρό τα ιδιόκτητα εργαλεία από το Zend), αλλά αυτή τη φορά έκανα λάθος - θα μιλήσουμε για το XHProf.
XHProf

Αυτός ο προγραμματιστής προφίλ αναπτύχθηκε ειδικά για το Facebook και ο πηγαίος κώδικας του άνοιξε τον Μάρτιο του 2009.

Η εγκατάσταση έγινε αρκετά γρήγορα και ομαλά.
wget pecl.php.net/get/xhprof-0.9.2.tgz
tar xvf xhprof-0.9.2.tgz
cd xhprof-0.9.2/extension/
phpize
./διαμόρφωση && πραγματοποίηση && εγκατάσταση
cd /usr/local/etc/php.d/
vim xhprof.ini
cd /usr/local/
vim header.php
vimfooter.php
vim etc/php.ini
/etc/init.d/php-fpm επανεκκίνηση
cp vhost.conf.template prof.my.conf
sed -i s/site/prof/ prof.my.conf
vim prof.my.conf
/etc/init.d/nginx επανεκκίνηση

Ας αναλύσουμε τις αναφερόμενες ρυθμίσεις

Xhprof.ini
extension=/usr/local/lib/php/extensions/no-debug-non-zts-20090626/xhprof.so
xhprof.output_dir="/home/max/www/profile/"

Prof.my.conf - Nginx config - το πιο τυπικό.

Διακομιστής (
ακούστε 80?
server_name prof.my;
σύνολο χαρακτήρων utf8;

Root /usr/local/src/xhprof-0.9.2/xhprof_html ;
τοποθεσία/(
ευρετήριο index.php;
}

Τοποθεσία ~ \.php$ (
fastcgi_pass 127.0.0.1:12000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/src/xhprof-0.9.2/xhprof_html/$fastcgi_script_name;
περιλαμβάνουν fastcgi_params?

Στο /usr/local/src/xhprof-0.9.2/xhprof_html υπάρχουν πηγές PHP που δημιουργούν ένα καλό WEBGUI για τον προγραμματιστή.

Λοιπόν για τα δύο κύρια αρχεία:

Header.php


include_once "/usr/local/src/xhprof-0.9.2/xhprof_lib/utils/xhprof_lib.php";
include_once "/usr/local/src/xhprof-0.9.2/xhprof_lib/utils/xhprof_runs.php";
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
}
}

Footer.php
if(isset($_COOKIE["xhprof"]))(
if (extension_loaded ("xhprof")) (
$profiler_namespace = "myapp"; // namespace για την εφαρμογή σας
$xhprof_data = xhprof_disable();
$xhprof_runs = νέο XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, $profiler_namespace);

// url στις βιβλιοθήκες διεπαφής χρήστη XHProf (αλλάξτε το όνομα και τη διαδρομή του κεντρικού υπολογιστή)
$profiler_url = sprintf("http://prof.my/index.php?run=%s&source=%s", $run_id, $profiler_namespace);
ηχώ<<Έξοδος προφίλ
ΕΞΩ;
}
}

Τώρα εκτελούμε οποιοδήποτε σενάριο PHP μέσω του ιστού και βλέπουμε στην επάνω αριστερή γωνία έναν σύνδεσμο προς την έξοδο του profiler - για αυτό ακριβώς δημιουργήθηκε ο κεντρικός υπολογιστής prof.my

Παρακαλώ σημειώστε - χρησιμοποιώ τον έλεγχο COOKIE! Με έναν τέτοιο έλεγχο, μπορείτε να χρησιμοποιήσετε με ασφάλεια το προφίλ σε έναν διακομιστή παραγωγής - σε πραγματικά δεδομένα και πραγματικό φορτίο.

Η διεπαφή ιστού του profiler εμφανίζει πινακίδες με πληροφορίες για κάθε λειτουργία και αναφέρει τις ακόλουθες πληροφορίες:

  • Αριθμός κλήσεων σε κάθε λειτουργία
  • Χρόνος τοίχου, χρόνος εκτέλεσης λειτουργιών (συμπεριλαμβανομένης της αναμονής για απαντήσεις από πρίζες, σύστημα αρχείων κ.λπ.).
  • Χρόνος CPU, χρόνος εκτέλεσης λειτουργιών (εξαιρουμένης της αναμονής για απαντήσεις από πρίζες, σύστημα αρχείων κ.λπ.).
  • Χρήση μνήμης
  • Μέγιστη χρήση μνήμης

Είναι δυνατή η ταξινόμηση του πίνακα με οποιαδήποτε από τις παραμέτρους

Οι πληροφορίες για κάθε λειτουργία χωρίζονται σε δύο ακόμη τύπους: Συμπεριλαμβανομένης και Αποκλειστικής. Το Inclusive περιλαμβάνει τα ψηφία που χρησιμοποιούνται από τις παιδικές κλήσεις, ενώ το Exclusive δεν τα περιλαμβάνει. Είναι επίσης δυνατό να κάνετε κλικ στο όνομα μιας συνάρτησης για να δείτε πληροφορίες μόνο για αυτήν και τις συναρτήσεις από τις οποίες κλήθηκε και που κλήθηκαν από αυτήν.

Εάν το GraphViz είναι εγκατεστημένο στο σύστημα, ο προγραμματιστής θα σχεδιάσει ένα γράφημα κλήσης για εσάς.

ΥΣΤΕΡΟΓΡΑΦΟ. Χωρίς να παραβιάζω τις παραδόσεις: αυτή είναι η πρώτη μου ανάρτηση στο Habré.

UPD: αναδημοσιεύτηκε σε PHP.

mob_info