2010-07-25 13 views
8

Ciao ragazzi Sto facendo il debug della mia applicazione qui e fondamentalmente in poche parole - l'applicazione si sta estinguendo sul mio server online o forse il mio server si sta estinguendo. Ma ho controllato questa applicazione con tre server diversi e tutti hanno mostrato risultati simili, l'applicazione sarebbe stata in esecuzione per un po 'ma all'improvviso una volta aprendo sempre più richieste avrei avuto un errore di rete o il sito non sarebbe riuscito a caricare.Come faccio a sapere quanta memoria/risorse sta usando il mio script php?

Sto sospettando che sia il mio codice qui, quindi ho bisogno di scoprire come posso renderlo meno dispendioso in termini di risorse, infatti non so perché lo sta facendo in primo luogo. Funziona bene sulla mia macchina localhost però.

Oppure è perché lo sto ospitando su un host tecnicamente condiviso? Dovrei cercare un hosting specializzato per ospitare un'applicazione? Ci sono molte richieste di database complesse e richieste Ajax nella mia applicazione qui.

risposta

10

Per quanto riguarda il controllo la quantità di memoria lo script sta usando è possibile chiamare periodicamente memory_get_usage(true) in punti nel codice per identificare quali parti del vostro script utilizzano la memoria. memory_get_peak_usage(true) restituisce ovviamente la quantità massima di memoria utilizzata.

Si dice che l'applicazione funzioni OK per un po '. Si tratta di un singolo script in esecuzione tutto questo tempo o di molte richieste/visitatori di pagine diverse? Di solito c'è un max_execution_time per ogni script (spesso predefinito a 30 secondi). Questo può essere modificato nel codice su base per script chiamando set_time_limit().

C'è anche un parametro memory_limit come impostato in php.ini. Questo potrebbe essere 64M o inferiore su un host condiviso.

"... una volta aprirò sempre più richieste ..." - Esiste un limite al numero di richieste simultanee (ajax) che un client può effettuare con il server. I browser potrebbero essere impostati a 8 o anche meno (questo può essere modificato in Firefox tramite about:config). Questo per impedire a un singolo client di inondare il server di richieste. Un server può essere configurato per escludere i client che aprono troppe richieste!

Un host condiviso potrebbe essere restrittivo. Tuttavia, a condizione che l'host non stia ospitando troppi siti, questi possono essere server abbastanza potenti, dando accesso a molta potenza per un tempo breve . Enfasi su breve tempo - è nell'interesse dell'host controllare gli script che consumano troppe risorse su un server condiviso mentre altri utenti ne risentirebbero.

Devo cercare un hosting specializzato per l'hosting di un'applicazione?

Dovrai essere più specifico. La maggior parte dei siti web in questi giorni sono "applicazioni". Se stai facendo qualcosa di più della semplice pubblicazione di pagine web e esegui costantemente script intensivi che vengono eseguiti per un periodo di tempo, potresti dover effettuare un hosting dedicato. Non solo per il tuo beneficio, ma a beneficio degli altri sul server condiviso!

+0

Grazie per la risposta, il fatto è che sto eseguendo un'applicazione simile a 37 Signals Basecamp e Highrise. L'ho attualmente impostato su un server di griglia su mediatemple. Ma la mia applicazione sembra estinguersi e ottengo errori di connessione di rete durante il caricamento durante il normale utilizzo dell'applicazione. Non è solo per servire le pagine web è una sua intera applicazione su quelli che ho citato. – Ali

+1

A quanto pare, sei già su un host ragionevolmente potente? Avete molti utenti _hammering_ il server? Se sei in grado di testare questo con un singolo utente e non funziona ancora, avrei detto che questo era certamente un problema con il tuo script, piuttosto che con il server? – MrWhite

0

La risposta è probabilmente il fatto che la tua società di hosting ha una configurazione php.ini abbastanza restrittiva. Ad esempio, potrebbero limitare la quantità di tempo per cui uno script può essere eseguito o limitare la quantità di memoria che uno script potrebbe utilizzare.

Cosa tenta di fare il codice?

È possibile considerare l'utilizzo di memory_get_usage e/o memory_get_peak_usage.

Problemi correlati