1 votos

El rastreo de procesos PHP muertos en Mac no funciona

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.

1voto

Jose Chavez Puntos 645

El comportamiento que observas no es un problema de hardware, sistema operativo o falta de recursos.

En su lugar, es simplemente la forma en que Laravel cola de trabajo. Si el trabajador tarda demasiado en procesar un trabajo, hay un tiempo de espera y el trabajador se mata con la señal 9. Del mismo modo, si el uso de memoria excede una cantidad determinada, el trabajador es eliminado.

Puede establecer estos límites con, por ejemplo, la opción --memory.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X