Ver el estado de ejecución

Ejecuta php start.php status
para ver el estado de funcionamiento de Workerman, algo similar a lo siguiente:

----------------------------------------------GLOBAL STATUS----------------------------------------------------
Workerman version:3.5.13          PHP version:5.5.9-1ubuntu4.24
start time:2018-02-03 11:48:20   run 112 days 2 hours   
load average: 0, 0, 0            event-loop:\Workerman\Events\Event
4 workers       11 processes
worker_name        exit_status      exit_count
ChatBusinessWorker 0                0
ChatGateway        0                0
Register           0                0
WebServer          0                0
----------------------------------------------PROCESS STATUS---------------------------------------------------
pid memory  listening                worker_name        connections send_fail timers  total_request qps    status
18306   2.25M   none                     ChatBusinessWorker 5           0         0       11            0      [idle]
18307   2.25M   none                     ChatBusinessWorker 5           0         0       8             0      [idle]
18308   2.25M   none                     ChatBusinessWorker 5           0         0       3             0      [idle]
18309   2.25M   none                     ChatBusinessWorker 5           0         0       14            0      [idle]
18310   2M      websocket://0.0.0.0:7272 ChatGateway        8           0         1       31            0      [idle]
18311   2M      websocket://0.0.0.0:7272 ChatGateway        7           0         1       26            0      [idle]
18312   2M      websocket://0.0.0.0:7272 ChatGateway        6           0         1       21            0      [idle]
18313   1.75M   websocket://0.0.0.0:7272 ChatGateway        5           0         1       16            0      [idle]
18314   1.75M   text://0.0.0.0:1236      Register           8           0         0       8             0      [idle]
18315   1.5M    http://0.0.0.0:55151     WebServer          0           0         0       0             0      [idle]
18316   1.5M    http://0.0.0.0:55151     WebServer          0           0         0       0             0      [idle]
----------------------------------------------PROCESS STATUS---------------------------------------------------
Summary 18M     -                        -                  54          0         4       138           0      [Summary]

Explicación

GLOBAL STATUS

De esta sección podemos ver

La versión de Workerman version:3.5.13

Hora de inicio 2018-02-03 11:48:20, ejecutándose desde run 112 days 2 hours

Carga del servidor load average: 0, 0, 0, que representa la carga media del sistema en los últimos 1 minuto, 5 minutos y 15 minutos.

La biblioteca de eventos IO utilizada, event-loop:\Workerman\Events\Event

4 workers (3 tipos de procesos, incluyendo ChatGateway, ChatBusinessWorker, Register, y WebServer)

11 processes (un total de 11 procesos)

worker_name (nombre del proceso worker)

exit_status (código de estado de salida del proceso worker)

exit_count (el número de salidas con ese código de estado)

Generalmente, un exit_status de 0 indica una salida normal. Si es otro valor, significa que el proceso terminó de manera anormal y se generó un mensaje de error similar a WORKER EXIT UNEXPECTED. La información de error se registra en el archivo especificado por Worker::logFile.

Los códigos de estado de salida comunes y su significado son los siguientes:

  • 0: indica una salida normal, el código de salida 0 aparecerá después de realizar un reinicio suave con reload, lo cual es normal. Nota que llamar a exit o die en el programa también resultará en un código de salida 0, y generará un mensaje de error WORKER EXIT UNEXPECTED; no se permite que el código de negocio llame a exit o die en Workerman.
  • 9: indica que el proceso fue terminado por la señal SIGKILL. Este código de salida ocurre principalmente durante stop o reload suave, y se debe a que un subproceso no respondió a la señal de reload dentro del tiempo estipulado (por ejemplo, mysql, curl, etc., que esperan bloqueos largos o bucles indefinidos de la lógica de negocio), siendo forzado a ser terminado por el proceso principal con la señal SIGKILL. Nota que enviar la señal SIGKILL a un subproceso usando el comando kill en la línea de comandos de linux también causará este código de salida.
  • 11: indica que PHP produjo un coredump, generalmente provocado por el uso de extensiones inestables. Comente la extensión correspondiente en php.ini; además, en algunas ocasiones puede ser un error de PHP, en cuyo caso deberá actualizar PHP.
  • 65280: este código de salida resulta de un error fatal en el código de negocio, por ejemplo, llamar a una función inexistente, error de sintaxis, etc. La información de error específica se registrará en el archivo especificado por Worker::logFile, y se puede encontrar también en el archivo especificado por error_log en php.ini (si se especifica).
  • 64000: este código de salida resulta de que el código de negocio lanzó una excepción, pero no la capturó, llevando al proceso a salir. Si Workerman se ejecuta en modo debug, la pila de excepciones se imprimirá en la terminal, mientras que en modo daemon, se registrará en el archivo especificado por Worker::stdoutFile.

PROCESS STATUS

pid:PID del proceso

memory:La memoria solicitada por PHP para este proceso. Este valor no incluye la memoria ocupada por el archivo ejecutable de PHP, así que el valor mostrado debe ser menor que la memoria ocupada real del proceso. Para más detalles, consulte memory_get_usage.

listening:Protocolo de la capa de transporte y puerto IP en escucha. Si no está escuchando en ningún puerto, mostrará none. Véase constructor de la clase Worker.

worker_name:Nombre del servicio que ejecuta este proceso, vea atributo name de la clase Worker.

connections:El número de instancias de conexión TCP que actualmente tiene este proceso. Las instancias de conexión incluyen TcpConnection y AsyncTcpConnection. Este valor es en tiempo real y no es acumulativo. Nota: Cuando se llama a close en la instancia de conexión, si el conteo correspondiente no disminuye, puede ser que el código de negocio esté guardando el objeto $connection, lo que impide que esta instancia de conexión se destruya.

total_request:Indica cuántas solicitudes ha recibido este proceso desde su inicio. La cantidad de solicitudes incluye tanto las solicitudes provenientes de los clientes como las solicitudes de comunicación interna de Workerman, como las solicitudes de comunicación entre Gateway y BusinessWorker en la arquitectura GatewayWorker. Este valor es acumulativo.

send_fail:Número de veces que este proceso falló al enviar datos al cliente. La razón del fallo generalmente es que la conexión del cliente fue cerrada. Este valor diferente de 0 generalmente indica un estado normal. Consulte las razones de send_fail en status. Este valor es acumulativo.

timers:Número de temporizadores activos en este proceso (no incluye los temporizadores eliminados ni los temporizadores de una sola vez ya ejecutados). Nota: Esta característica requiere Workerman versión >=3.4.7. Este valor es en tiempo real y no es acumulativo.

qps:Número de solicitudes de red recibidas por segundo por el proceso actual; nota: solo se contabiliza este valor cuando se ejecuta -d en status, de lo contrario se mostrará 0. Esta característica requiere Workerman versión >=3.5.2. Este valor es en tiempo real y no es acumulativo.

status: Estado del proceso; si es idle, significa inactivo, si es busy, indica que está ocupado. Nota: Si un proceso se encuentra temporalmente ocupado, es una situación normal; si un proceso permanece en estado ocupado continuamente, puede que haya un bloqueo en la lógica de negocio o un bucle infinito, por lo que es necesario investigar según la sección Depurando procesos ocupados. Nota: Esta característica requiere Workerman versión >=3.5.0.

Principio

Después de que se ejecuta el script status, el proceso principal envía una señal SIGUSR2 a todos los procesos worker, luego el script status entra en un breve período de suspensión para esperar los resultados de estado de cada proceso worker. Durante este tiempo, los procesos worker inactivos recibirán la señal SIGUSR2 y escribirán su estado de ejecución (número de conexiones, número de solicitudes, etc.) en un archivo de disco específico, mientras que los procesos worker que están manejando la lógica de negocio esperarán a que finalice dicha lógica antes de escribir su información de estado. Después de una breve suspensión, el script status comienza a leer el archivo de estado en el disco y muestra los resultados en la consola.

Nota

Al ejecutar status, es posible que algunos procesos aparezcan como busy, la razón es que el proceso está ocupado manejando la lógica de negocio (por ejemplo, la lógica de negocio está bloqueada durante mucho tiempo en una solicitud de curl o de base de datos, o en un bucle grande), lo que impide que se informe el estado, llevando a que se muestre como busy.

Si se presenta este problema, es necesario revisar el código de negocio para ver dónde puede estar bloqueando durante mucho tiempo, y evaluar si el tiempo de bloqueo está dentro de lo esperado; si no es así, se debe investigar el código de negocio conforme a la sección Depurando procesos ocupados.