2012-04-03 24 views
5

Sto scrivendo un demone in PHP. Non ho frequentato una classe di OS al college. Quindi, mi chiedo, quali sono le statistiche server/altre che devo osservare per essere sicuro che il mio Daemon non stia consumando troppe risorse di sistema e sarà in grado di scalare quando ci sono più record mysql. Fondamentalmente, il mio demone sta elaborando un sacco di righe della tabella mysql.Un Daemon on the Rocks

Ad esempio, capisco che ho bisogno di vedere per quanto tempo il daemon sta prendendo per elaborare un certo numero di righe e la quantità di memoria che sta usando. Ma, come posso determinare se sta perdendo memoria? Inoltre, quali altri parametri di sistema dovrei giudicare dal demone?

+0

È possibile ottenere alcuni di ciò che è necessario facendo in modo che il daemon scriva le voci su un file di registro sul disco. Ad esempio, potresti scrivere l'ora e un messaggio ogni volta che elabora altre 100 righe. Leggendo il file di registro otterrai informazioni specifiche del demone. L'uso degli strumenti da riga di comando di Unix può mostrare le statistiche sull'utilizzo del disco, della memoria e del processore. – Jazz

+0

L'utilizzo della CPU/l'utilizzo della memoria/iowait saranno le tue preoccupazioni principali. – Corbin

+0

Se sovraccarichi la CPU, usa 'usleep' in PHP per rallentare. Stai solo facendo da sfondo al demone con &? – halfer

risposta

2

Tuttavia, come si determina se perde memoria?

Le cose che stai chiedendo qui hanno poco a che fare con il sistema operativo. Hai ragione a essere preoccupato per l'utilizzo della memoria. Una risposta adeguata a questa domanda va ben oltre lo scopo di un post qui, ma potreste voler iniziare osservando come funziona il conteggio dei riferimenti per la gestione della memoria e assicuratevi di aver configurato il correttore di riferimento circolare nell'installazione di PHP. La trama si infittisce quando scopri che il client mysql blocca PHP mentre è in esecuzione e ignora i limiti di memoria di PHP - quindi se recuperi un set di risultati troppo grande, non lo saprai fino a quando mysql_query non ritorna e il tuo codice cade: usa sempre LIMIT nelle query (o selezione PK) e per le preferenze eseguire il daemon sotto un watchdog. Provare utilizzando limiti di memoria inferiori a quelli che si intende utilizzare in produzione.

Si noti che PHP inizierà a rendere disponibile più memoria per sé tramite la raccolta dati inutili quando pensa che la memoria sia esaurita.

Scrivi molte cose per registrare i file!

0

A seconda di come si eseguirà il demone fire up top in linux e quindi di elaborare un sacco di righe (100k + o qualcosa che richiederebbe circa 30 secondi per l'esecuzione) di ciò che si prevede. Cerca di vedere quanto aumenta l'utilizzo della memoria: con piccole attività accade troppo velocemente, hai bisogno del processo in esecuzione.

Quindi assicurarsi di aver disinserito ($ objectOrString), chiudere tutti i file e le connessioni al database non appena si è finito di usarli: questo aiuterà.

Anche in questo caso, a seconda di cosa farà questo file, potrebbe essere necessario lasciarlo terminare e utilizzare un processo cron per avviarlo in modo che PHP possa eseguire la sua garbage collection.