Verificar o estado de execução

Executar php start.php status
pode verificar o estado de execução do Workerman, semelhante ao seguinte:

----------------------------------------------ESTADO GLOBAL----------------------------------------------------
Versão do Workerman: 3.5.13          Versão do PHP: 5.5.9-1ubuntu4.24
hora de início: 2018-02-03 11:48:20   execução de 112 dias 2 horas   
carga média: 0, 0, 0            loop de eventos:\Workerman\Events\Event
4 trabalhadores       11 processos
nome_trabalhador        status_saída      contagem_saída
ChatBusinessWorker 0                0
ChatGateway        0                0
Register           0                0
WebServer          0                0
----------------------------------------------ESTADO DO PROCESSO---------------------------------------------------
pid memória  escutando                nome_trabalhador        conexões falha_envio timers  total_requisições qps    status
18306   2.25M   nenhum                     ChatBusinessWorker 5           0         0       11            0      [ocioso]
18307   2.25M   nenhum                     ChatBusinessWorker 5           0         0       8             0      [ocioso]
18308   2.25M   nenhum                     ChatBusinessWorker 5           0         0       3             0      [ocioso]
18309   2.25M   nenhum                     ChatBusinessWorker 5           0         0       14            0      [ocioso]
18310   2M      websocket://0.0.0.0:7272 ChatGateway        8           0         1       31            0      [ocioso]
18311   2M      websocket://0.0.0.0:7272 ChatGateway        7           0         1       26            0      [ocioso]
18312   2M      websocket://0.0.0.0:7272 ChatGateway        6           0         1       21            0      [ocioso]
18313   1.75M   websocket://0.0.0.0:7272 ChatGateway        5           0         1       16            0      [ocioso]
18314   1.75M   text://0.0.0.0:1236      Register           8           0         0       8             0      [ocioso]
18315   1.5M    http://0.0.0.0:55151     WebServer          0           0         0       0             0      [ocioso]
18316   1.5M    http://0.0.0.0:55151     WebServer          0           0         0       0             0      [ocioso]
----------------------------------------------ESTADO DO PROCESSO---------------------------------------------------
Resumo  18M     -                        -                  54          0         4       138           0      [Resumo]

Explicação

ESTADO GLOBAL

Aqui, podemos ver

A versão do Workermanversion:3.5.13

Tempo de início 2018-02-03 11:48:20, com execução de 112 dias 2 horas

Carga do servidor load average: 0, 0, 0, representando a carga média do sistema nos últimos 1, 5 e 15 minutos, respectivamente.

Utilização da biblioteca de eventos de E/S, event-loop:\Workerman\Events\Event

4 trabalhadores (3 tipos de processos, incluindo processos ChatGateway, ChatBusinessWorker, Register e WebServer)

11 processos (um total de 11 processos)

nome_trabalhador (nome do processo de trabalhador)

status_saída (código de saída do processo de trabalhador)

contagem_saída (contagem de vezes em que o código de saída foi registrado)

Normalmente, um status_saída de 0 indica uma saída normal. Se for outro valor, o processo saiu de forma anormal, e uma mensagem de erro como WORKER EXIT UNEXPECTED será registrada no arquivo especificado por Worker::logFile.

Códigos de status_saída comuns e seus significados são os seguintes:

  • 0: Representa uma saída normal, ocorrendo após um reload suave. É importante observar que chamadas de exit ou die no código de negócios também gerarão um código de saída 0 e uma mensagem de erro WORKER EXIT UNEXPECTED, pois o Workerman não permite que o código de negócios use essas declarações.
  • 9: Indica que o processo foi morto pelo sinal SIGKILL. Este código de saída geralmente ocorre durante uma parada ou reload suave, devido à falha do processo filho em responder ao sinal de reload do processo pai dentro do tempo especificado (por exemplo, devido a bloqueios prolongados, como em chamadas longas para mysql, curl, ou loops de negócios infinitos, entre outros). É importante observar que o uso do comando kill em um terminal Linux para enviar o sinal SIGKILL para um processo filho também gerará este código de saída.
  • 11: Refere-se a um despejo de núcleo do PHP, geralmente causado pelo uso de extensões instáveis. O recomendado é comentar a extensão correspondente no arquivo php.ini; em casos raros, pode se tratar de um bug no PHP, requerendo então a atualização do PHP.
  • 65280: Ocorre quando o código de negócios tem um erro fatal, como a chamada para uma função inexistente ou erro de sintaxe. As informações específicas do erro são registradas no arquivo especificado por Worker::logFile e, se especificado, no arquivo error_log do php.ini.
  • 64000: Ocorre quando o código de negócios lança uma exceção que não é tratada, resultando no encerramento do processo. Se o Workerman estiver sendo executado no modo de depuração, a pilha de chamadas da exceção será impressa no terminal. No modo daemon, a pilha de chamadas da exceção será registrada no arquivo especificado por Worker::stdoutFile.

ESTADO DO PROCESSO

pid: PID do processo

memória: A quantidade atual de memória usada pelo processo (não incluindo a memória usada pelo próprio arquivo executável do PHP)

escutando: Protocolo de transporte e enfileiramento IP. Se nenhum porto estiver sendo escutado, será exibido como nenhum. Consulte Construtor da Classe Worker.

nome_trabalhador: O nome do serviço executado pelo processo. Ver propriedade de nome da classe Worker.

conexões: O número atual de instâncias de conexão TCP que o processo tem. As instâncias de conexão incluem instâncias de TcpConnection e AsyncTcpConnection. Este valor é uma contagem em tempo real e não cumulativo. Observação: Se a contagem ainda não diminuiu após o fechamento de uma instância de conexão, pode ser devido ao código de negócios mantendo o objeto $connection vivo, impedindo a destruição da instância de conexão.

total_requisições: O total de requisições que o processo recebeu desde o seu início. Essas requisições incluem tanto as recebidas do cliente quanto as solicitações de comunicação interna do Workerman, como no caso da arquitetura GatewayWorker, em que Gateway e BusinessWorker trocam solicitações de comunicação.

falha_envio: O número de falhas no envio de dados do processo para o cliente. Se este valor for diferente de zero, geralmente significa que a conexão do cliente foi encerrada. Consulte falhas de envio de status. Este valor é cumulativo.

timers: O número de temporizadores ativos (excluindo temporizadores excluídos e temporizadores de execução única) no processo. Observação: Este recurso está disponível apenas na versão do Workerman 3.4.7 ou superior.

qps: A quantidade de solicitações de rede que o processo recebe por segundo. Observação: Este recurso está disponível apenas na versão do Workerman 3.5.2 ou superior. Este valor é em tempo real, não cumulativo.

status: O atual estado do processo. Se for ocioso, significa que está inativo; se estiver ocupado, significa que está ocupado. Observação: A presença prolongada de um processo ocupado pode indicar bloqueios de negócios ou loops infinitos de negócios. Consulte a seção depuração de processos ocupados. Observação: Este recurso está disponível apenas na versão do Workerman 3.5.0 ou superior.

Princípio

Após a execução do script status, o processo principal envia um sinal SIGUSR2 a todos os processos de trabalhador. Em seguida, o script de status entra em um curto período de suspensão para aguardar que todos os processos de trabalhador relatem seus estados. Durante este tempo, os processos de trabalhador ociosos imediatamente escrevem seus estados (como número de conexões, número de requisições, etc.) em arquivos específicos no disco, enquanto os processos ocupados aguardam a conclusão do processamento da lógica de negócios antes de atualizar seus estados. Após a breve suspensão, o script de status lê os arquivos de estado no disco e exibe os resultados no console.

Observação

Ao executar o status, é possível que alguns processos apareçam como ocupados, devido ao bloqueio de processamento de negócios (como bloqueios prolongados em chamadas para curl ou bancos de dados, ou execução de loops de longa duração), impossibilitando a atualização do estado e, consequentemente, sendo exibido como ocupado. Nesse caso, é necessário verificar o código de negócios, identificando onde ocorre o bloqueio e avaliando se o tempo de bloqueio está dentro do esperado. Caso contrário, é necessário seguir o procedimento de depuração de processos ocupados para investigar o código de negócios.