Quindi, innanzitutto, grazie a tutti coloro che mi hanno indirizzato nella giusta direzione per quanto riguarda il monitoraggio dell'utilizzo della memoria PHP e laravel.
Ho risposto alla mia domanda sperando che possa beneficiare degli sviluppatori di laravel in futuro, poiché la mia soluzione era difficile da trovare.
Dopo aver digitato 'dmesg' per visualizzare i messaggi di sistema. Ho scoperto che lo script php veniva ucciso da Linux.
Così, ho aggiunto le chiamate di registrazione di memoria nel mio script prima e dopo ciascuna delle aree chiave del mio script:
Log::Info('Memory now at: ' . memory_get_peak_usage());
Poi ho eseguito lo script mentre si guarda l'output di registro e anche l'uscita del ' top 'comando.
Ho scoperto che anche se i miei metodi stavano finendo e le variabili stavano andando fuori campo, la memoria non veniva liberata.
cose che ho provato, che DIDNT fare alcuna differenza nel mio caso:
- unset ($ varname) sulle variabili dopo aver finito con loro - sperando di ottenere GC per dare il via
- aggiungendo gc_enable() all'inizio dello script e quindi aggiungendo le chiamate a gc_collect_cycle() dopo che un numero significativo di vars non è stato impostato.
- Disabilitare le transazioni mysql - il pensiero forse è che la memoria è intensiva - non lo era.
Ora, la cosa strana era che nessuno dei precedenti ha fatto alcuna differenza. Il mio script stava ancora usando 150mb o ram a tempo morto!
La soluzione che effettivamente lavorate:
Ora, questo è sicuramente una soluzione specifica laravel. Ma lo scopo dei miei script è fondamentalmente analizzare un grande feed xml e quindi inserire migliaia di righe in mysql usando Elequent ORM.
Si scopre che Laravel crea informazioni di registrazione e oggetti per aiutarvi a vedere le prestazioni della query.
Spegnendo questa funzione con la seguente chiamata "magica", ho ottenuto il mio script da 150mb a circa 20mb!
Questa è la "magia"; chiamano:.
DB::connection()->disableQueryLog();
posso dirvi per il momento ho trovato questa chiamata, stavo afferrando sugli specchi ;-(
cli php per impostazione predefinita non ha limiti di tempo di esecuzione. forse è qualcos'altro, come il monitor di OOM di sistema? –
http://stackoverflow.com/questions/952868/generic-killed-error-in-php-script –
grazie a @RichardChristensen, sì dmesg effettivamente mostra che linux ha ucciso il mio script a causa della memoria insufficiente .... 2999.882248] Memoria esaurita: uccidere il processo 7819 (php) punteggio 554 o sacrificare il figlio [2999.882338] Processo ucciso 7819 (php) total-vm: 445160kB, anon-rss: 286012kB, file-rss: 0kB – DEzra