DominiHostingServerTutorialVPS

Come Ottimizzare le Performance di Apache

Apache è un web server incredibilmente potente e performante.
Vista la sua diffusione gli sviluppatori hanno provveduto a inserire nella configurazione iniziale molti moduli pre-installati rendendolo adatto a nuovi progetti soprattutto quando la necessità di essere produttivi sovrasta la necessità di avere performance elevate (fattore che viene fuori man mano che il sito cresce e aumentano i problemi di performance.

Se nei tuoi progetti stai usando Apache con una configurazione Server economico, come ad esempio il server Atom (disponibile  a € 19,90 al mese), o se vuoi massimizzare le performance su server più potenti ci sono alcune cose che è necessario fare.

DISATTIVARE I MODULI NON NECESSARI SU APACHE
Analizzando sul vostro server la struttura delle cartelle di Apache noterete le seguenti cartelle:

/etc/apache2/mods-enabled
/etc/apache2/mods-available

Nella cartella mods-available c’è una lista di tutti moduli installati su quel server mentre nella cartella mods-enabled c’è un elenco dei moduli attivi sul server.

Generalmente su un server o una vps appena configurati sono attivi 17 moduli che risultano essere troppi anche perchè la maggior parte di questi non verranno mai utilizzati. Bisogna in ogni caso fare attenzione in quanto molti moduli possono avere come requisito altri moduli la cui rimozione può causare malfunzionamenti.

Una prassi consigliata prima di procedere all’ottimizzazione della nostra configurazione server consiste nel segnarsi tutti i moduli attivi in maniera tale da poter tornare indietro in qualsiasi momento ripristinando quelli attivi all’inizio.
Su Ubuntu e Debian, per disattivare un modulo è possibile usare il comando (disattivazione del comando autoindex):

sudo a2dismod autoindex

Alcuni moduli che consumano molte risorse sul server e che è il caso di rimuovere a meno che non siano necessari sono:

  • php
  • ssl
  • rewrite
  • perl
  • python
  • rack / ruby / passenger

A seconda dell’installazione questi moduli possono essere già disattivati ma sempre meglio controllare e rimuovere quelli non necessari.

Terminata la rimozione dei moduli in eccesso è sempre una buona pratica verificare il file di Log alla ricerca di eventuali errori. Il file di Log può essere visto all’indirizzo: /var/log/apache2/error.log

Ad esempio se capitasse l’errore:

Syntax error on line 6 of /etc/apache2/sites-enabled/site1:
Invalid command ‘DAVLockDB’, perhaps misspelled or defined by a module not included in the server configuration
Action ‘configtest’ failed.

Questo significa che uno dei moduli che è stato disattivato era necessario per il corretto funzionamento di apache. Per questo errore il modulo specifico da riattivare è: dav_fs.
Per riattivarlo basta usare il comando:

sudo a2enmod dav_fs

Al riavvio di Apache è necessario verificare nuovamente se ci sono errori fino alla totale rimozione.
Una pratica noiosa ma che vale il tempo speso.

RIMUOVERE IL CODICE DA APACHE

Se stai hostando sul tuo server siti in PHP è molto probabile che tu stia usando il mob_php di cui abbiamo parlato prima. Lo stesso discorso vale se stai usando Ruby.

Fondamentalmente il problema con questo modulo è che nel codice apache è inserito anche del codice scritto in C; ciò comporta l’uso di molte più risorse e memoria per ogni pagina caricata.

Alcuni Tools che possono aiutare a migliorare le performance sono i seguenti:

  • php-fpm : tool per PHP
  • uWSGI o gnunicorn : tool per Python
  • Unicorn : tool per Rails

Un effetto collaterale di questa ottimizzazione è che può non essere facile far funzionare tutto al primo tentativo. In ogni caso è possibile trovare online documentazione molto dettagliata e precisa su come procedere.

Normalmente avviene questo: Apache riesce a riconoscere “al volo” i processi speciali che eseguono i file PHP (ma vale anche per Python e Ruby) e li invia al codice C embedded andando a generare contenuti dinamici in background.

I risultati e l’ottimizzazione può essere sorprendente al punto da ridurre i processi di apache a 10MB da 100/150 MB.

LIMITARE IL NUMERO DI PROCESSI E FIGLI DEL SERVER APACHE

La maggior parte delle configurazioni Apache non sono ben supportate da piccoli server e comunque risparmiare le risorse è sempre un bene. Normalmente apache è configurato per avere un massimo di 25 processi figli.
Se ogni processo figlio occupa circa 100mb di ram ne possiamo ricavare che il nostro server richiederà 2,5 giga di ram solo per Apache. Generalmente un visitatore tramite browser web richiede 4 oggetti dal web contemporaneamente, quindi con un server con 2,5 giga di ram rischiamo di avere problemi a servire 10 utenti contemporaneamente causando rallentamenti nella visualizzazione delle pagine.

Inoltre capita che il server tenga attivi questi processi che non è ancora riuscito a servire (e che ormai probabilmente l’utente ha abbandonato) riducendo ancora di più la ram a disposizione.

Per migliorare la situazione è necessario configurare quanta ram richiede la tua applicazione e allocare tutta la ram rimanente ad apache.

Ad esempio se il tuo server ha 3 processi php-fpm che gestiscono contenuti dinamici e ognuno di essi usa fino a 80mb di ram, il server mysql usa 150mb di ram (per un totale di 390mb di ram), è necessario allocare la ram restante ad Apache.

Quando Apache è attivo digitate sulla shell del vostro server il comando top.

top -bn 1
PID     USER          PR   NI   VIRT    RES    SHR    S   %CPU   %MEM        TIME+        COMMAND[…] 15015  www-data   20   0     232m   9644   1900   S   0.0            1.6             0:00.02        apache2
15016  www-data   20   0     232m   9644   1900   S   0.0            1.6             0:00.01        apache2
15017  www-data   20   0     232m   9644   1900   S   0.0            1.6             0:00.02        apache2

In questa schermata ogni processo di apache occupa circa 9,644 di ram del server (colonna RES).

Ora è necessario modificare il config file del server apache ( /etc/apache2/apache2.conf) e localizzare la sezione con la configurazione mpmpreforkmodule.

Questo è un esempio di come è possibile configurare il proprio web server:

<IfModule mpm_prefork_module>
StartServers 3
MinSpareServers 3
MaxSpareServers 5
MaxClients 15
MaxRequestsPerChild 0
</IfModule>

 

Lascia un commento

Back to top button