Veja o estado de execução

Execute php start.php status
para ver o estado de execução do Workerman, semelhante ao seguinte:

----------------------------------------------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]

Descrição

GLOBAL STATUS

Nesta seção podemos ver

A versão do Workerman version:3.5.13

O tempo de inicialização 2018-02-03 11:48:20, com run 112 days 2 hours

A carga da servidor load average: 0, 0, 0, que é a média de carga do sistema nos últimos 1, 5 e 15 minutos.

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

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

11 processes (total de 11 processos)

worker_name (nome do processo worker)

exit_status (código de status de saída do processo worker)

exit_count (número de saídas com esse código de status)

Em geral, um exit_status de 0 indica uma saída normal. Se for um valor diferente, significa que o processo saiu de forma anormal, gerando uma mensagem de erro semelhante a WORKER EXIT UNEXPECTED. A mensagem de erro será registrada no arquivo especificado em Worker::logFile.

Os códigos de saída comuns e seus significados são os seguintes:

  • 0: Indica uma saída normal, após executar o reload, um código de saída de 0 é normal. Note que chamar exit ou die no código também resultará em um código de saída 0 e gerará uma mensagem de erro WORKER EXIT UNEXPECTED. Não é permitido que o código de negócios no Workerman chame as instruções exit ou die.
  • 9: Indica que o processo foi terminado pelo sinal SIGKILL. Esse código de saída ocorre principalmente durante operações de stop e reload, e acontece quando um subprocesso não responde ao sinal de reload do processo principal dentro do tempo estipulado (por exemplo, mysql, curl ou um loop infinito), e é forçado a ser terminado pelo processo principal com SIGKILL. Observe que enviar um sinal SIGKILL para um subprocesso usando o comando kill na linha de comando do Linux também resultará nesse código de saída.
  • 11: Indica que o PHP gerou um coredump, geralmente devido a uma extensão instável. Por favor, comente a respectiva extensão no php.ini; em alguns casos, pode ser um bug do PHP, e pode ser necessário atualizar o PHP.
  • 65280: Esse código de saída é causado por um erro fatal no código de negócios, como chamar uma função inexistente, erro de sintaxe, etc. As mensagens de erro específicas serão registradas no arquivo indicado por Worker::logFile ou no arquivo especificado em php.ini no campo error_log (se houver).
  • 64000: Esse código de saída é causado por uma exceção lançada pelo código de negócios, mas que não foi capturada, resultando na saída do processo. Se o Workerman estiver rodando em modo debug, a pilha de chamadas da exceção será impressa no terminal; se estiver rodando em modo daemon, a pilha de chamadas será registrada no arquivo especificado em Worker::stdoutFile.

PROCESS STATUS

pid: PID do processo

memory: A memória solicitada pelo PHP para este processo. Este valor não inclui a memória ocupada pelo executável do PHP, portanto, o valor exibido será menor que a memória real ocupada pelo processo. Para mais informações, consulte memory_get_usage.

listening: Protocolo da camada de transporte e IP da porta de escuta. Se não estiver escutando nenhuma porta, exibe "none". Consulte Construtor da classe Worker.

worker_name: O nome do serviço em execução por este processo, veja a propriedade name da classe Worker.

connections: Quantas instâncias de conexão TCP este processo atualmente possui. As instâncias de conexão incluem instâncias de TcpConnection e AsyncTcpConnection. Este valor é em tempo real, não acumulativo. Atenção: quando uma instância de conexão chama close, se a contagem correspondente não diminuir, pode ser que o código de negócios tenha mantido o objeto $connection, impedindo que essa instância de conexão seja destruída.

total_request: Indica quantos pedidos este processo recebeu desde que foi iniciado. O número de pedidos inclui não apenas os pedidos enviados pelos clientes, mas também os pedidos de comunicação interna do Workerman, como aqueles entre Gateway e BusinessWorker na arquitetura do GatewayWorker. Este valor é acumulativo.

send_fail: Número de falhas ao enviar dados para o cliente; a razão para a falha geralmente é a desconexão do cliente. Um valor diferente de 0 é geralmente considerado estado normal, consulte as razões para send_fail no status. Este é um valor acumulativo.

timers: Número de temporizadores ativos neste processo (não inclui temporizadores excluídos e temporizadores de execução única que já foram executados). Atenção: esse recurso requer Workerman versão >=3.4.7. Este valor é em tempo real, não acumulativo.

qps: Número de pedidos de rede recebidos pelo processo por segundo; note que este valor só será contabilizado se o status for chamado com -d, caso contrário, exibirá 0. Este recurso requer Workerman versão >=3.5.2. Este valor é em tempo real, não acumulativo.

status: Estado do processo, se for idle, representa que está ocioso; se for busy, significa que está ocupado. Atenção: se o processo entrar em um breve estado de ocupação, isso é normal. Se o processo permanecer em estado ocupado por muito tempo, pode haver um bloqueio ou um loop infinito no código de negócios, e você precisará investigar de acordo com a seção depuração de processos ocupados. Atenção: esse recurso requer Workerman versão >=3.5.0.

Princípio

Depois que o script status é executado, o processo principal envia um sinal SIGUSR2 para todos os processos workers. Em seguida, o script status entra em um breve estado de espera, aguardando os resultados de estatísticas de estado dos processos workers. Nesse momento, os processos workers ociosos que recebem o sinal SIGUSR2 imediatamente escrevem seu estado de execução (número de conexões, número de pedidos etc.) em um arquivo específico no disco, enquanto os processos workers que estão processando a lógica de negócios aguardam a finalização do processamento antes de escrever suas informações de estado. Após um breve sono, o script status começa a ler o arquivo de estado no disco e exibe os resultados no console.

Atenção

Ao usar o status, pode-se notar que alguns processos estão exibindo busy. Isso pode ocorrer porque o processo está ocupado processando negócios (por exemplo, a lógica de negócios está bloqueada por um longo tempo aguardando um curl ou uma solicitação de banco de dados, ou está executando um grande loop) e não consegue enviar o estado, resultando na exibição de busy.

Nesse caso, é necessário inspecionar o código de negócios para identificar onde ele está causando o bloqueio prolongado e avaliar se a duração do bloqueio está dentro das expectativas. Se não corresponder às expectativas, deve-se investigar o código de negócios de acordo com a seção depuração de processos ocupados.