Jun 21, 2011

Επιταχύνοντας την απόδοση του embedded Weblogic Server με τον JDeveloper

Ένας πιο σύντομος και αποδοτικός κύκλος προγραμματισμού είναι πάντα το ζητούμενο και μάλιστα σε σχέση με τα εργαλεία ανάπτυξης. Η περίπτωση του ενσωματωμένου Weblogic στον JDeveloper δεν αποτελεί εξαίρεση: ως οποιοσδήποτε Java Server επιδέχεται διάφορες παραμετροποιήσεις, ενώ μπορούμε και εμείς να βοηθήσουμε τα πράγματα στον τομέα της απόδοσης (performance) με διάφορους τρόπους, όπως:

  1. Με την χρησιμοποίηση ενός solid state δίσκου. Όταν ξεκινά το JVM διαβάζει πολλά JAR αρχεία και πραγματικά έχω δει μεγάλη βελτίωση της ταχύτητας τόσο της εκκίνησης του JDeveloper όσο και του Weblogic όταν βρίσκονται σε τέτοιου είδους αποθηκευτικό μέσο. Η αγορά ενός μικρού SSD (πχ 40GB) δεν είναι δυσβάστακτη ενώ πέρα από τα workstations, υπάρχουν και διάφορα laptops (πχ τα Thinkpad) που επιτρέπουν να χρησιμοποιείτε δυο δίσκους ταυτόχρονα.
  2. Κατά δεύτερο λόγο θα έλεγα πως το development μηχάνημα να έχει επαρκή μνήμη (μεγαλύτερη των 3.5GB) και να τρέχει ένα 64-bit Linux με το ανάλογο 64-bit JDK, τόσο για τον JDeveloper όσο και για το Weblogic
  3. Αρκετός χρόνος στην εκκίνηση του deployment μιας εφαρμογής δαπανιέται είτε στην αρχικοποίηση του security ή στο ανέβασμα και άνοιγμα των data source connections. Αν η εφαρμογή σας δεν αλλάζει κάθε τρεις και λίγο ρόλους, τότε θα πρότεινα να απενεργοποιήσετε την μεταφορά των πληροφοριών του security, αφού προηγηθεί το πρώτο ανέβασμα. Σε οποιαδήποτε περίπτωση αλλαγής της ασφάλειας, ανεβάστε τις νέες ρυθμίσεις. Παρόμοια, χρησιμοποιείτε ένα δηλωμένο data source στο Weblogic server σας και όχι application-wide γεγονός που επιβαρύνει το άνοιγμα/κλείσιμο συνδέσεων κατά τη διάρκεια του (un)deployment.

  1. Ειδικά για τα datasource, θα πρότεινα να ορίσετε σχετικά μικρά μεγέθη για το connection pool, για παράδειγμα 0..5 ώστε να έχετε επαναχρησιμοποίηση πόρων και γρήγορο deployment της εφαρμογής.
  2. Υπάρχουν διάφορα αρχεία που γράφονται όταν βρίσκεται σε λετουργία ο Weblogic ή όταν γίνεται deployment: για παράδειγμα temporary files, log files (του συστήματος ή της εφαρμογής), deployment αρχείων κλπ. Σε σχέση με την εκμετάλλευση του SSD και του Linux, μπορείτε να κάνετε mount επιλεγμένα σημεία (πχ το /tmp, το drs/ ή τα log directories) στο σύστημα αρχείων tmpfs ώστε πρακτικά να γράφονται στην μνήμη και όχι στο δίσκο.
  3. Στο ίδιο μήκος κύματος, μπορείτε να απενεργοποιήσετε το domain log broadcaster του Weblogic μιας και το domain είναι ο server σας.
  4. Το domain που κατασκευάζει o Weblogic περιλαμβάνει διάφορες βιβλιοθήκες. Σύμφωνα με το JConsole, όταν ξεκινά ο Weblogic μου (στην έκδοση 11.1.1.3.0) καταλαμβάνει περί τα 90MB μνήμης. Μπαίνοντας στο Weblogic console, υπάρχουν μια σειρά από βιβλιοθήκες (deployments) που ενδεχομένως δεν χρειάζεστε, όπως wsil-wls.wsm-pm, κλπ Απλά δεν τις κάνουμε target στον Default Server. Με κατάλληλες δοκιμές και tuning, μπορούμε να ξεκινήσουμε το server μας με τουλάχιστον 30% λιγότερη μνήμη.

  1. Και μια που μιλάμε για θέματα μνήμης: αν κάνουμε ένα κατάλληλο profiling του Weblogic μπορούμε να δούμε που κινείται έπειτα από 2-3 deployments ώστε να διαμορφώσουμε κατάλληλα και με μεγαλύτερη ακρίβεια τα μεγέθη στο setDomainEnv.sh (http://adfhowto.blogspot.com/2010/10/increasing-memory-of-embedded-weblogic.html)

3 comments:

javapapo said...

θα ήθελα να δώσω μια παρόμοια συμβουλή - σχετική. Απο την δική μου προσωπική εμπειρία (και με τον weblogic)είδα ότι η χρήση του application server έξω από το context του IDE (δηλαδή να μην τρέχει μέσα από controls τουIDE) σε συνδυασμό με τεχνικές remote deployment - κάνει τον όλο κύκλο εργασίας πολυ πιο εύκολο και ευέλικτο. Εχω κουραστεί τόσα χρόνια με τα διάφορα IDE να πεθαίνουν από μνήμη ή να μου περνάνε το σωστό command στο πανελ του serber απλά για να λέμε - ότι έχουμε κουμπάκι που ξεκινάει τον server.

Για όσους αναρωτηθούν τι γίνεται με το debug μιας και το έχω ακούσει και αυτό. Ανοίξτε debug port στο weblogic domain σας και χρησιμοποιείστε το remote debug profile του eclipse για να κάνετε την δουλειά σας.

Διαχωρισμός τώρα χεχε!

Ευχαριστώ!

Serafeim Karapatis said...

Υπάρχουν και οι περιπτώσεις που θέλεις hot deployment σελίδων ή ακόμα και κλάσεων και δεν ξέρω πώς (ή πόσο εύκολα) μπορεί να ανταποκριθεί το remote deployment. Ιδίως στον κόσμο του ADF είναι κάτι που συμβαίνει κατά κόρον (και έχει βελτιωθεί το hot deployment κατά πολύ στην 11.1.2)

javapapo said...

τα JSP μπορείς να τα ρίξεις με την μία σε ένα exploded deployment και θα τα πάρει. Τις κλάσεις όχι..ισως κάποιο εργαλείο σαν το JRebel να δουλέψει.

Όσο για το ADF ειναι μεταξύ μας ένα κακόγουστο τεχνικό αστείο και πρέπει να φύγει από την μέση - ταλαιπωρεί χρόνια κόσμο αλλά και μέτρια project. sad but true.