Estoy ejecutando un simple proceso PHP que utiliza un poco de memoria y CPU. El límite máximo de memoria es de 2G y el script se ejecuta desde consola.
La memoria utilizada nunca supera los 200 MB. El uso de la CPU fluctúa entre el 10 y el 80% de un solo núcleo.
Al azar, el proceso será matado con el mensaje Killed: 9
. No se indica nada más en el mensaje de error de la consola y no aparece nada en los registros.
Esto ocurre incluso si pauso el script usando XDebug para que no se use memoria adicional.
Esto ocurre también si desactivo Xdebug, así que no sospecho que sea el culpable.
He probado a reiniciar, pero sigue pasando.
El PHP script simplemente extrae una lista de anuncios de Facebook usando su PHP SDK v3.2 y luego los añade a una base de datos. Sólo hay un trabajador en ejecución. Es un proceso muy simple.
Tengo 32 GB de RAM y 1 TB de disco duro. Corriendo PHP 7.2 con nginx, MySQL 5.7 y redis.
Mi sw_vers
salida:
ProductName: Mac OS X
ProductVersion: 10.14.2
BuildVersion: 18C54
Estado de la protección de integridad del sistema: enabled
Esta es la esencia del script:
$ads = $this->getApiAdAccount()->getAds($fields, $params);
$ads->setUseImplicitFetch(true);
$ads->rewind();
if (!$ads->valid()) {
return false;
}
while ($ads->valid()) {
$adData = $ads->current()->getData();
try {
if (!Campaign::find($adData['campaign'])) {
dispatch(new ImportCampaign($adData['campaign']));
}
Ad::updateOrCreate(['id' => $adData['id']], $adData);
} catch (\Exception $e) {
$this->error($e);
}
$ads->next();
}
No hay un punto específico en el que falle. Puedo ejecutar el trabajador de trabajo Laravel (cola de redis) para procesar el código e insertar / actualizar la pequeña matriz de datos que procesa en cada bucle.
¿Cómo puedo rastrear el origen de este fallo?
He intentado dmesg
y dmesg | grep -E -i -B100 'killed process'
como se sugiere en otro sitio, pero no sale ninguna información útil.
1 votos
¿Dice algo más que "Asesinado: 9". A menos que haya utilizado todo el swap en el equipo, el uso de memoria no debe conducir a procesos que se matan con la señal 9. Yo buscaría la causa en otra parte. ¿Cuál es el nombre de su script? ¿Cuál es el propósito del script / qué hace? ¿Qué comando utilizas exactamente para iniciarlo? ¿Lo inicias desde Terminal.app? ¿Mantienes abierta esa ventana de terminal?
0 votos
¿Qué significa
sw_vers
mostrar para su build / versión y cómo está configurado SIP?0 votos
También podrías necesitar mostrar una versión mínima de cómo se ejecuta tu script PHP. Tendría que hacer muchas suposiciones para intentar reproducir tu problema. Con un poco de datos, alguien podría ser capaz de señalar La respuesta rápida.
0 votos
@bmike He actualizado mi descripción con más información.
0 votos
@jksoegaard He actualizado la descripción con tu petición. Estoy utilizando
iTerm2
para mi consola. Estoy ejecutandophp artisan queue:work redis --queue=facebook
bajo Laravel 5.6. La ventana permanece abierta durante todo el proceso para que pueda ver si hay algún error.