Mar 29, 2015

Παρακολούθηση απόδοσης ADF εφαρμογών με το XRebel

Όταν η παρακολούθηση της απόδοσης (performance) μιας εφαρμογής αποτελεί τμήμα της καθημερινής διαδικασίας ανάπτυξης (development process), τότε μπορούμε να φτιάχνουμε καλύτερο λογισμικό και να περιορίσουμε δυσάρεστες εκπλήξεις στην παράδοση σε ένα παραγωγικό σύστημα. Αν και αυτό θα έπρεπε να ισχύει για κάθε περίπτωση, ιδίως για τις εφαρμογές που βασίζονται στο Oracle ADF αποκτά ιδιαίτερη αξία, καθώς αποτελεί ένα database-oriented framework και συχνά προβλήματα απόδοσης προέρχονται από το επίπεδο της βάσης δεδομένων. Γι' αυτό ακριβώς το λόγο, βρήκα εξαιρετικά χρήσιμο το εργαλείο XRebel που κατά τη διάρκεια της εκτέλεσης μιας web εφαρμογής μας εμφανίζει άμεσα, σε ένα widget ενσωματωμένο στην σελίδα μας, πληροφορίες για τα SQL statements που εκτελούνται, τους χρόνους τους καθώς και την επιβάρυνση του web session.

Δοκίμασα λοιπόν την τελευταία έκδοση του XRebel (2.0 Beta) σε μια εφαρμογή φτιαγμένη με το UI shell (dynamic tabs) Ευτυχώς, η ZeroTurnaround (εταιρεία που κατασκευάζει το XRebel) προσέφερε μια δοκιμαστική έκδοση 30 ημερών μέσα στον Μάρτιο 2015. Έπειτα από το download, η ενεργοποίηση του XRebel γίνεται στο Run Configuration του JDeveloper, με την προσθήκη του java agent για το xrebel.jar.
Έπειδή το XRebel θα ενσωματωθεί στο runtime της εφαρμογής μας, καλό θα είναι να αυξήσουμε το heap size του Weblogic (τουλάχιστον -Xmx=1024m) Ξεκινούμε την εφαρμογή όπως γνωρίζουμε. Με την εκκίνηση λοιπόν, θα εμφανιστεί το widget που XRebel. Εκεί εμφανίζεται:

  1. profiling πληροφορία του κώδικα μας (ποια σημεία αργούν πιο πολύ στην εκτέλεση)
  2. Database operations (queries και SQL statements) που εκτελούνται στην οθόνη μας
  3. Το πόσα και ποια objects βρίσκονται στο user session και ποιά είναι η επιβάρυνση τους στην μνήμη του Weblogic
Αν για παράδειγμα κάνουμε κλικ για περισσότερες πληροφορίες για τα database operations, θα εμφανιστεί ένα popup που αναλύονται όλα τα SQL statements, ποιούς πίνακες αφορούν, πόσε εγγραφές επιστρέφονται και πόσο χρόνο πήρε η εκτέλεσή τους. Εντυπωσιακό ! Στην παραμετροποίηση του XRebel μπορούμε να ορίσουμε threshold values για τα timings των SQL queries ή τον αριθμό τους.
Κάτι που λείπει είναι η άθροιση των SQL statements ώστε να διαπιστώσουμε επαναλαμβανόμενες SQL εντολές. Τα απολέσματα του XRebel μπορούν να κατευθυνθούν σε αρχείο (διαδρομή $HOME/.xrebel/xrebel.log στο Linux) ώστε να κάνουμε εκεί analytics. Να και μια φωτογραφία από το application profiling.
Η βοήθεια που μου έδωσε το XRebel ήταν ανεκτίμητη. Με εύκολο, γρήγορο και γραφικό τρόπο μου έδωσε πληροφορίες απόδοσης της εφαρμογής και με βοήθησε να βελτιώσω κάποια SQL queries και να διορθώσω κάποια bindings, χωρίς να κοιτάξω σε πολλαπλά log files. Το συνιστώ ανεπιφύλακτα !

No comments: