Extremely high load on lamp server

Apollon Oikonomopoulos apollon at noc.grnet.gr
Fri Dec 11 18:13:52 EET 2009


On 16:25 Fri 11 Dec     , Vangelis Pothos wrote:
> 2009/12/10  <rouvas at di.uoa.gr>:
> 
> > Χωρίς να ξέρω τι σε οδηγεί σε αυτήν την υπόθεση, δεν την πιστεύω.
> > Κατά τη γνώμη μου, η μόνη περίπτωση να συμβαίνει αυτό είναι λάθος γραμμένα
> > queries. Όμως, αν χρησιμοποιείς κάποια από τα γνωστά OSS πακέτα (π.χ.
> > drupal, joomla, phpbb κλπ) οι πιθανότητες να συμβαίνει αυτό είναι
> > εξαιρετικά μικρές.
> >
> > Το ποιο πιθανό αίτιο, κατά τη γνώμη μου, είναι οι crawlers που οδηγούν σε
> > "φρικάρισμα" του Apache και μετά έρχεται το swap...
> > Στην οποία περίπτωση, μείωσε τους Apache clients και τον αριθμό των
> > αιτήσεων που εξυπηρετεί ο καθένας και πρέπει να είσαι ΟΚ.
> > Παράδειγμα:
> > MaxClients 50
> > MaxRequestsPerChild 1000
> >
> > Φυσικά τα ανωτέρω νούμερα θα πρέπει να τα προσαρμόσεις στην δική σου
> > περίπτωση.
> >
> > -Στάθης
> 
> Έχεις δίκιο. Είχα αποκλείσει, αφελώς, το ενδεχόμενο να είναι swap
> καθώς δεν παρατηρούσα ποτέ πάνω από 5% swap. Τα memory statistics του
> systat όμως για το τελευταίο κόλλημα έδειξαν εκείνη την ώρα μεγάλο
> swapping.
> 
> Θα δοκιμάσω να χαμηλώσω Maxclients και MaxRequestPerChild.

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

* Τα key buffers της MySQL: όσο μεγαλύτερη η βάση, τόσο πιο μεγάλα key 
  buffers πρέπει να έχεις ώστε τα συνήθηκ indexed searches να μη 
  σηκώνουν indexes από το δίσκο. Γενικά αν δεν έχεις ρυθμίσει τις 
  παραμέτρους της MySQL (buffer sizes, query cache, thread cache), 
  καν'το γιατί τα defaults είναι κατάλληλα μόνο για test setups.
  
  Ένας καλός μπούσουλας είναι η χρήση του mysqlreport (περιλαμβάνεται σε 
  πρόσφατες εκδόσεις της mysql), σε συνδυασμό με αυτό: 
  http://hackmysql.com/mysqlreportguide

* Τα maxclients του apache.

Γενικά πρέπει να ρυθμίσεις αυτά τα μεγέθη ώστε η mysql να μη σηκώνει 
πολλά πράματα από το δίσκο για όσο το δυνατόν περισσότερα queries, και ο 
apache σε συνθήκες μεσαίου προς υψηλού φορτίου να μη σου αναγκάζει το 
σύστημα να swappάρει. Σε αυτά πρόσθεσε και ένα περιθώριο ελεύθερης 
μνήμης για να χρησιμοποιεί ο kernel ως pagecache για το στατικό 
περιεχόμενο.

> 
> Μήπως να κοιτάξω να βάλω nginx?
Ναι, εκ πείρας έχει κάνει μεγάλη διαφορά μόνο και μόνο βάζοντάς τον να 
σερβίρει το στατικό περιεχόμενο απευθείας και να κάνει proxy τα dynamic 
requests στον apache. Είναι κρίμα να σηκώνεις ένα apache child με 
mod_κέρατα πάνω (καμια 40αριά MB RSS) για να σερβίρει ένα jpg.

Σε μηχάνημα με *αρκετά* requests, είδα τα apache children να πέφτουν από 
70 σε 12 (με 5 spare), απλά βάζοντας τον nginx μπροστά να κάνει serve το 
στατικό περιεχόμενο.

/Απόλλων

--
Apollon Oikonomopoulos
GRNET Network Operations Centre       http://www.grnet.gr


More information about the Linux-greek-users mailing list