Βελτιστοποίηση απόδοσης του Apache / cPanel

Προϋποθέσεις: Αν δεν έχετε εγκατεστημένο το module Prefork, θα πρέπει να το εγκαταστήσετε μέσω του EasyApache στο WHM και να γίνει recompile του Apache.

Εκτελέστε σε κονσόλα το Apache Benchmark: 

ab -n 500 -c 50 http://www.yourdomain.gr/el

Σας προτείνουμε να δοκιμάσετε μία σελίδα σας με πολλές απαιτήσεις σε επεξεργαστική ισχύ.

Θα εμφανίσει αποτελέσματα όπως τα παρακάτω. 

Document Path: /el
Document Length: 0 bytes
Concurrency Level: 50
Time taken for tests: 28.558 seconds
Complete requests: 500
Failed requests: 0
Write errors: 0
Non-2xx responses: 500
Total transferred: 243000 bytes
HTML transferred: 0 bytes
Requests per second: 17.51 [#/sec] (mean)
Time per request: 2855.831 [ms] (mean)
Time per request: 57.117 [ms] (mean, across all concurrent requests)
Transfer rate: 8.31 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.5 0 3
Processing: 337 2829 916.6 2779 6550
Waiting: 337 2828 916.6 2777 6550
Total: 338 2829 916.5 2779 6550
Percentage of the requests served within a certain time (ms)
  50% 2779
  66% 2917
  75% 3018
  80% 3111
  90% 4094
  95% 4836
  98% 5162
  99% 5453
  100% 6550 (longest request)

Για να κάνετε έλεγχο της μνήμης που απαιτεί κάθε αίτηση του apache εκτελέστε σε κονσόλα:

ps aux | grep apache

Διαιρέστε το μισό της συνολικής μνήμης του διακομιστή με το μέσω όρο της απαιτούμενη μνήμης των εφαρμογών του apache.

Π.χ. ένας διακομιστής με 2GB RAM και με εφαρμογές Apache που ο μέσος όρος σε κατανάλωση μνήμης είναι 20MB, θα έχει ως αποτέλεσμα 100.

Επεξεργαστείτε το /usr/local/apache/conf/httpd.conf

Π.χ.:

nano /usr/local/apache/conf/httpd.conf

Μεταβάλλετε τις τιμές όπως παρακάτω:

<IfModule prefork.c>
  StartServers 20
  MinSpareServers 15
  MaxSpareServers 20
  MaxClients 100
  MaxRequestsPerChild 5000
</IfModule>

Επεξήγηση:

StartServers  = Έναρξη 20 httpd processes.
MinSpareServers  = Ελάχιστα 15 processes σε αναμονή για αίτηση.
MaxSpareServers  = Όχι παραπάνω από 20 processes σε αναμονή.
MaxClients  = Μέγιστο 100 processes (είναι το αποτέλεσμα που πήραμε από την παραπάνω διαίρεση).
MaxRequestsPerChild  = Όριο αιτήσεων 5000 ανά process.

Επίσης ενεργοποιήστε την παράμετρο KeepAlive:

  KeepAlive On
  MaxKeepAliveRequests 100
  KeepAliveTimeout 12

Ορίστε MaxKeepAliveRequests σύμφωνα με τα στοιχεία των σελίδων σας.

Ορίστε KeepAliveTimeout στο διπλάσιο από την βραδύτερο αίτηση (longest request) (6550 στο συγκεκριμένο άρθρο).

Επανεκινήστε τον apache (μέσω του cPanel).