Ho un paio di server che ospitano un singolo sito di e-commerce Magento con traffico moderato (60k visualizzazioni di pagina al giorno segnalate da Google Analytics, penso a 80k riportate sul server stesso). Il server database funziona senza intoppi e rapidamente, a parte un raro singhiozzo occasionale, ma il server apache è caduto ogni tanto.
Ho impostato magento per utilizzare la cache di PHP (APC) consigliata, oltre a contenere i propri file di cache in un tmpfs da 1,5 gig (questo tmpfs diventa regolarmente abbastanza pieno e ho uno script in esecuzione per cancellare i file di cache quando il tmpfs è più dell'80% completo). Fornisco la maggior parte delle immagini da Amazon Cloudfront. Di recente ho impostato nginx come proxy inverso per apache (nginx serve anche i file statici). Ho configurato apache al meglio delle mie possibilità - keepalive e hostnamelookups sono disattivati e il prefork è configurato come segue:
<IfModule prefork.c>
StartServers 50
MinSpareServers 50
MaxSpareServers 100
ServerLimit 512
MaxClients 256
MaxRequestsPerChild 400
</IfModule>
Non ho disattivato i file .htaccess e la registrazione degli accessi è attiva. So che ci sono alcuni moduli che posso disattivare. Non sono sicuro di quale effetto avrebbe una di queste tre modifiche, se presente.
Il server apache è un VPS con 6 gig di RAM. Al momento della stesura del report load average: 17.77, 18.27, 49.76
, il server riporta , ma ci sono circa 2 gig di RAM liberi. Quando va davvero male, il carico va a 120+ e rimane lì - riavviare apache riporta il sito su e il carico di nuovo.
vmstat
è (mentre il server segnala il carico sopra), penso, mostrando un valore di inattività della CPU che oscilla tra 0 e 70 o giù di lì. iostat
mostra un valore di iowait compreso tra 0 e 0,2%.
Sono un po 'bloccato. Quello che poco so mi sta dicendo che il problema è che la CPU è sovraccarica a causa della combinazione del codice in esecuzione e del numero di utenti. Ma non sono abbastanza esperto per essere certo che questo è il problema. Se questo è il problema, penso che le soluzioni consistano nel migliorare il codice o nel dividere l'hosting del sito su due VPS con un bilanciamento del carico.
Quindi, immagino che le mie domande siano:
- Cos'altro posso fare per trovare problemi o colli di bottiglia sul server?
- Ci sono delle ovvie modifiche che posso apportare alla configurazione del server per migliorare questo?
- È una buona idea impostare un sistema automatizzato per riavviare apache quando il carico supera un determinato livello?
- Da quanto sopra, quanto è probabile che il sito abbia superato il server?
Modificare:
Ho trovato qualcosa di strano - / var / spool / mail / root era grande ... 38 gig. Sembra ... malsano. Potrebbe essere questo il problema?