2011-01-29 22 views
9

Come o quando so che la mia applicazione Web non è in grado di gestire il traffico/attività e mostrare un tipo di pagina "Fail Whale"?Quando mostrare una balena fallita?

+6

Preferisco chiamarlo octocat. –

+0

Questo è probabilmente più un problema del server che un problema di codice. –

risposta

8

Si potrebbe provare sys_getloadavg() se si desidera visualizzare un errore quando il server è in alto carico.

<?php 
    $load = sys_getloadavg(); 
    $max_load = 95; 

    if($load[0] >= $max_load){ 
     // Show failwhale 
    }else{ 
     // Do stuff 
    } 
?> 
+0

Questa è una soluzione piuttosto buona. Esegui dei test di stress sul server per scoprire quale tipo di carico può gestire per darti un'idea del tuo valore massimo. – Endophage

+0

Sì. Questo è buono Ora mi chiedo come ottenere l'idea del valore massimo ?? Comunque grazie @Joseph W – ptamzz

3

Se il server Web non è in grado di ottenere una risposta valida da un altro server importante, che si tratti di un servizio Web chiave, un server di autenticazione, un server di database e così via, sembra un buon momento per qualcosa come una balena malfunzionante.

1

Dal momento che si avrebbe bisogno di guardare una serie di questioni, direi Inizia la gestione degli errori:

http://www.php.net/manual/en/book.errorfunc.php

sguardo nella documentazione di connessione del produttore del database (come troppe connessioni); qui è MySQL:

http://php.net/manual/en/function.mysql-error.php

http://dev.mysql.com/doc/refman/5.5/en/error-messages-server.html

supponendo che il server può rispondere al carico (e l'utente non ottiene un 408 Richiesta scaduta), dovrebbe essere qualcosa rilevabile all'interno del codice, non qualcosa di sbagliato all'interno del perimetro del server stesso (ad esempio, memoria insufficiente del server). Potresti anche avere altri timeout che si verificano, ad esempio un servizio web che risponde lentamente o altro.

Inoltre, se capisci, lascia una riga al team di Facebook.

3

Questo è qualcosa che ho discusso con i colleghi in passato. Non puoi prevedere quando il traffico sarà troppo alto. Alla fine il server sarà semplicemente caduto. Potenzialmente potresti far avviare il server con la pagina "fail whale" e avere una sorta di passaggio al tuo sito operativo. Quindi, se il tuo server è andato sotto carico, potrebbe tornare automaticamente con la pagina "fallita".

Il tuo server non può più gestire il traffico quando fallisce ... è lì che si trova la difficoltà nell'identificazione. La risposta di Matt V funzionerebbe ma dovresti aggiungere una sorta di controllo del battito cardiaco e sarebbe comunque un processo manuale per interrompere la risposta "OK".

+0

In un certo senso non sono d'accordo; –

+2

@Jared Farrish Come mai? Non lasciarmi così curioso ... – Endophage

+0

Oops. In realtà stavo per dire che non pensavo che Twitter mostrasse una balena fallita a causa di un problema di tipo DOS (che è comprensibilmente difficile da rispondere), ma perché Ruby non era abbastanza "robusto" per gestire il carico . Come ho sottolineato, se il server non può rispondere o risponde ma non riesce a passare, è un problema difficile da affrontare. Ma ci possono essere altri problemi all'interno del contenitore del server che potrebbero prestarli per mostrare un "errore del sito" man mano che alcuni recuperi (anche se Apache risponde se il server non funziona correttamente). Tuttavia, ho colpito aggiungere un commento per errore. –