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.